MongoDB — Захватывает мир. Семь способов резервного копирования и восстановления данных

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

Прежде чем перейти к статье, хочу вам представить, экономическую онлайн игру Brave Knights, в которой вы можете играть и зарабатывать. Регистируйтесь, играйте и зарабатывайте!

Привет Хабр, и привет читателям. Не очень долго пришлось ждать выхода моей новой статьи. Спасибо всем, кто дал feedback по моей прошлой статье https://habr.com/ru/post/569282/
Было очень приятно пообщаться с единомышленниками. Отдельный респект, тем кто дал совет как можно улучшить статью.
Сегодня я хотел бы поделиться со всеми читателями об одной системе управления базами данных, не требующая описания схемы таблиц, правильно - это MongoDB СУБД считается одной из классических примеров NoSQL-систем. Документы состоят из пар ключ-значение, которые являются основной единицей данных в MongoDB. Коллекции содержат наборы документов и функции, которые эквивалентны таблицам реляционной базы данных. MongoDB — это база данных, появившаяся в середине 2000-х годов. Про установку не буду ничего описывать все и так понятно из официального гайда Всем добро пожаловать. https://docs.mongodb.com/v5.0/administration/install-community/

В этой статье буду показывать о том, как настроить резервное копирование данных, и потом восстановить. На самом деле это не так все сложно, и даже скажу больше интуитивно понятно:) Не буду задерживать всех своей писаниной и сразу приступим к делу. Мануал заточен на то, что у вас уже установлена СУБД из официального гайда. Едиственное скажу, что я буду показывать все на машинке с Линуксом, ОС Ubuntu 20.04.2 LTS

Формат данных в MongoDB

Одним из популярных стандартов обмена данными и их хранения является JSON (JavaScript Object Notation). JSON эффективно описывает сложные по структуре данные. Способ хранения данных в MongoDB в этом плане похож на JSON, хотя формально JSON не используется. Для хранения в MongoDB применяется формат, который называется BSON (БиСон) или сокращение от binary JSON.

BSON позволяет работать с данными быстрее: быстрее выполняется поиск и обработка. Хотя надо отметить, что BSON в отличие от хранения данных в формате JSON имеет небольшой недостаток: в целом данные в JSON-формате занимают меньше места, чем в формате BSON, с другой стороны, данный недостаток с лихвой окупается скоростью.

Подключаемся к нашей СУБД, создадим для Резервной копии три базы данных под названием HABR1, HABR2, HABR3. Для наполнения этих бд создадим пару коллекций.

root@backup-server:~# mongo

> use HABR
db.createCollection("posts")
db.createCollection("address")
db.createCollection("phone")

> use HABR2
db.createCollection("posts2")
db.createCollection("address2")
db.createCollection("phone2")

> use HABR3
db.createCollection("posts3")
db.createCollection("address3")
db.createCollection("phone3")
db.createCollection("phonehabr")


Создали бд, проверим, все ли нормально с ними:)
> show dbs

switched to db admin
admin> show dbs
HABR         57.3 kB
HABR2        24.6 kB
HABR3        24.6 kB
admin         184 kB
config       73.7 kB
local        81.9 kB

Как мы видим наши бд создались, давайте проверим есть ли в них коллекции которые мы создавали ранее.

admin> use HABR
switched to db HABR
HABR> show collections
addreshabr
address3
addresshabr
phone5
phonehabr
posts
postshabr
HABR> use HABR2
switched to db HABR2
HABR2> show collections
addres
phone
posts
HABR2> use HABR3
switched to db HABR3
HABR3> show collections
addres3
phone3
posts3

Все коллекции на месте. Можно приступать к первому варианту Резервной копии.
Резервную копию будем делать из под рута.
Делается все одной командой:

mongodump --host=localhost --gzip -d HABR --archive=/tmp/backup-db-habr.gz

root@backup-server:/tmp/test# ls -la
total 20
drwxr-xr-x  2 root root 4096 Aug  3 18:33 .
drwxrwxrwt 13 root root 4096 Aug  3 18:32 ..
-rw-r--r--  1 root root  638 Aug  3 18:32 backup-db-habr.gz
-rw-r--r--  1 root root  416 Aug  3 18:33 backup-db-habr2.gz
-rw-r--r--  1 root root  423 Aug  3 18:33 backup-db-habr3.gz

Как видим, Резервная Копия создалась успешно.

Восстановление из такого бэкапа.
mongorestore --gzip --archive=backup-db-habr.gz

В данном примере делаем Резервную копию одной командой, и складываем в архив, есть несколько вариантов, как можно сделать резервное копирование, постараюсь описать в этой статье как можно больше вариантов.

Способ 2 - Резервное копирование всех баз данных, без сжатия данных.

Создадим директорию хранения такого бэкапа
mkdir -p /tmp/backup/
Запустим резервное копирование:
mongodump --out /tmp/backup/

После успешного резервного копирования перейдем в директорию с нашей базой и посмотрим что там лежит. Все правильно здесь хранятся коллекции БЕЗ СЖАТИЯ в BSON и JSON формате.

root@backup-server:/tmp/backup/HABR# ls -la
total 36
drwxr-xr-x 2 root root 4096 Aug  3 21:08 .
drwxr-xr-x 5 root root 4096 Aug  3 21:09 ..
-rw-r--r-- 1 root root    0 Aug  3 21:08 addreshabr.bson
-rw-r--r-- 1 root root  177 Aug  3 21:08 addreshabr.metadata.json
-rw-r--r-- 1 root root    0 Aug  3 21:08 address3.bson
-rw-r--r-- 1 root root  175 Aug  3 21:08 address3.metadata.json
-rw-r--r-- 1 root root    0 Aug  3 21:08 addresshabr.bson
-rw-r--r-- 1 root root  178 Aug  3 21:08 addresshabr.metadata.json
-rw-r--r-- 1 root root    0 Aug  3 21:08 phone5.bson
-rw-r--r-- 1 root root  173 Aug  3 21:08 phone5.metadata.json
-rw-r--r-- 1 root root    0 Aug  3 21:08 phonehabr.bson
-rw-r--r-- 1 root root  176 Aug  3 21:08 phonehabr.metadata.json
-rw-r--r-- 1 root root    0 Aug  3 21:08 posts.bson
-rw-r--r-- 1 root root  172 Aug  3 21:08 posts.metadata.json
-rw-r--r-- 1 root root    0 Aug  3 21:08 postshabr.bson
-rw-r--r-- 1 root root  176 Aug  3 21:08 postshabr.metadata.json

Восстановление из такого бэкапа:
mongorestore --drop --dir /tmp/backup

Параметр --drop используется для удаления коллекции перед импортом(если она существует),во избежания ошибки duplicate key errors Этот параметр --drop следует применять с осторожностью.

Восстановление определенной коллекции (например, коллекции postshabr в базе данных HABR) с бекапа всех баз данных:
mongorestore --drop -v --dir /root/backup --nsInclude 'habr.postshabr'

Восстановление всех баз данных и всех коллекций, за исключением определенной коллекции(например, коллекции postshabr в базе habrdb)
mongorestore --drop -v --dir /root/backup --nsExclude 'habr.postshabr'

Способ 3 - Резервное копирование всех баз данных с сжатием.
mongodump --gzip --out /tmp/backup

root@backup-server:/tmp/backup/HABR# ls -la
total 44
drwxr-xr-x  2 root root 4096 Aug  3 21:51 .
drwxr-xr-x 13 root root 4096 Aug  3 21:51 ..
-rw-r--r--  1 root root    0 Aug  3 21:08 addres.bson
-rw-r--r--  1 root root   23 Aug  3 21:51 addres.bson.gz
-rw-r--r--  1 root root  173 Aug  3 21:08 addres.metadata.json
-rw-r--r--  1 root root  152 Aug  3 21:51 addres.metadata.json.gz
-rw-r--r--  1 root root    0 Aug  3 21:08 phone.bson
-rw-r--r--  1 root root   23 Aug  3 21:51 phone.bson.gz
-rw-r--r--  1 root root  172 Aug  3 21:08 phone.metadata.json
-rw-r--r--  1 root root  151 Aug  3 21:51 phone.metadata.json.gz
-rw-r--r--  1 root root    0 Aug  3 21:08 posts.bson
-rw-r--r--  1 root root   23 Aug  3 21:51 posts.bson.gz
-rw-r--r--  1 root root  172 Aug  3 21:08 posts.metadata.json
-rw-r--r--  1 root root  153 Aug  3 21:51 posts.metadata.json.gz

Восстановление с такого бекапа.
mongorestore --gzip --drop --dir /mnt/backup

Способ 4 - Резервное копирование всех баз данных с сжатием в один архив(.gz)
mongodump --gzip --archive=/tmp/backup/mybackup.gz

Восстановление с такого бекапа:
mongorestore --gzip --drop --archive=/tmp/backup/mybackup.gz

Способ 5 - Резервное копирование определенной базы данных.
mongodump --gzip -d HABR2

root@backup-server:/tmp/backup/dump/HABR2# mongodump --gzip -d HABR2
2021-08-04T00:17:24.033+0300	writing HABR2.posts to dump/HABR2/posts.bson.gz
2021-08-04T00:17:24.033+0300	writing HABR2.phone to dump/HABR2/phone.bson.gz
2021-08-04T00:17:24.035+0300	writing HABR2.addres to dump/HABR2/addres.bson.gz
2021-08-04T00:17:24.036+0300	done dumping HABR2.posts (0 documents)
2021-08-04T00:17:24.036+0300	done dumping HABR2.phone (0 documents)
2021-08-04T00:17:24.037+0300	done dumping HABR2.addres (0 documents)

Восстановление с такого бекапа:
mongorestore --gzip --dir /tmp/backup/

Способ 6 - Резервное копирование одной коллекции address из базы данных HABR2.
mongodump --gzip -d HABR2 -c address

root@backup-server:/tmp/backup/dump/HABR2# ls -la
total 16
drwxr-xr-x 2 root root 4096 Aug  3 22:05 .
drwxr-xr-x 3 root root 4096 Aug  3 22:05 ..
-rw-r--r-- 1 root root   23 Aug  3 22:05 addres.bson.gz
-rw-r--r-- 1 root root  152 Aug  3 22:05 addres.metadata.json.gz

Просмотр содержимого bson-файла:
zcat posts.bson.gz | bsondump --pretty

root@backup-server:/# zcat posts.bson.gz | bsondump --pretty
2021-08-03T22:23:57.113+0300	0 objects found

Способ 7 - Бекап всей базы HABR2 за исключением одной коллекции address mongodump --gzip -d HABR2 --excludeCollection=address

root@backup-server:/tmp/backup/dump/HABR2# mongodump --gzip -d HABR2 --excludeCollection=addres
2021-08-04T00:16:41.482+0300	writing HABR2.phone to dump/HABR2/phone.bson.gz
2021-08-04T00:16:41.483+0300	writing HABR2.posts to dump/HABR2/posts.bson.gz
2021-08-04T00:16:41.484+0300	done dumping HABR2.phone (0 documents)
2021-08-04T00:16:41.485+0300	done dumping HABR2.posts (0 documents)

Надеюсь, что любому кто столкнется с такой задачей, прочитав эту статью будет понятно, как работать с этой СУБД. Всем спасибо за чтение данной статьи!)

Источник: https://habr.com/ru/post/571138/


Интересные статьи

Интересные статьи

Часто при разговорах с клиентами мы спрашиваем, как они ведут учет различных данных и используют ли они CRM-систему? Популярный ответ — мы работаем с Excel-файлами, а пот...
Всем привет! Сегодня мы хотели бы поделиться с вами нашим опытом анализа лидарных облаков. В заметке расскажем: - какими инструментами и библиотеками можно пользоват...
Часто от программистов PHP можно услышать: «О нет! Только не „Битрикс“!». Многие специалисты не хотят связываться фреймворком, считают его некрасивым и неудобным. Однако вакансий ...
Источник REUTERS/Vasily Fedosenko Привет, хабр. 2020 выдается богатым на события, к тому же в Беларуси расцветает сценарий цветной революции. Предлагаю абстрагироваться от эмоций ...
Этот пост будет из серии, об инструментах безопасности, которые доступны в Битриксе сразу «из коробки». Перечислю их все, скажу какой инструмент в какой редакции Битрикса доступен, кратко и не очень р...