Как создать резервную копию и восстановить базу данных MongoDB?

Опубликовано: 7 Октября, 2022

MongoDB считается одним из классических примеров систем NoSQL. Его документы состоят из пар ключ-значение, которые являются основной единицей данных в MongoDB. Его коллекции содержат группы документов и функций, которые эквивалентны таблицам в реляционных базах данных. MongoDB — это база данных, появившаяся в середине 2000-х годов. В этой статье мы узнаем, как сделать резервную копию данных, а затем восстановить их. Руководство было разработано на компьютере с операционной системой Ubuntu 20.04.2 LTS.

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

Одним из популярных стандартов для обмена и хранения данных является JSON (нотация объектов JavaScript). JSON может эффективно описывать данные со сложной структурой. В этом отношении способ хранения данных в MongoDB аналогичен JSON, хотя технически JSON не используется. Вместо JSON MongoDB использует BSON (двоичный JSON) для хранения данных в MongoDB. BSON ускоряет работу с данными. Это обеспечивает более быстрый поиск и обработку. Хотя, следует отметить, что BSON, в отличие от JSON, имеет небольшой недостаток. В целом данные JSON занимают меньше места, чем данные в BSON; с другой стороны, высокая скорость полностью компенсировала бы этот недостаток.

Итак, давайте подключимся к нашей MongoDB и создадим три базы данных для резервных копий. Это будут DB1, DB2 и DB3. Чтобы наполнить эти базы данных, добавим несколько коллекций.

use DB1
db.createCollection("posts1")
db.createCollection("address1")
db.createCollection("phone1")

use DB2
db.createCollection("posts2")
db.createCollection("address2")
db.createCollection("phone2")

use DB3
db.createCollection("posts3")
db.createCollection("address3")
db.createCollection("phone3")

Мы создали наши базы данных. Теперь проверим, все ли в порядке:

use admin
show dbs

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

use DB1
show collections

use DB2
show collections

use DB3
show collections

Все коллекции есть. Теперь мы можем перейти к первому варианту резервного копирования.

Чтобы сделать резервную копию, войдите в систему как root. Теперь создайте каталог для хранения резервной копии:

$ mkdir /tmp/backup_v1

Теперь используйте следующую команду для создания резервной копии:

$ mongodump --host=localhost --gzip --db DB1 --archive=/tmp/backup_v1/backup-db-1.gz

Теперь, после создания резервной копии, давайте перейдем в каталог базы данных и посмотрим, что в нем есть, с помощью следующей команды:

$ ls -la /tmp/backup_v1

Как видите, наша резервная копия только что создана.

Теперь для восстановления данных из такой резервной копии мы используем следующую команду:

$ mongorestore --gzip --archive=/tmp/backup_v1/backup-db-1.gz

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

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

Создадим директорию для хранения резервной копии:

$ mkdir /tmp/backup_v2

Используйте следующую команду для резервного копирования:

$ mongodump --out /tmp/backup_v2

После успешного резервного копирования давайте перейдем в каталог базы данных и посмотрим, что там есть. Он имеет коллекции BSON и JSON без сжатия.

$ ls -la /tmp/backup_v2/db1

Теперь восстановите данные из этой резервной копии с помощью следующей команды:

$ mongorestore --drop --dir /tmp/backup_v2

Здесь параметр –drop используется для удаления коллекции перед импортом (если она существует), чтобы избежать дублирования ошибок ключа. Этот параметр –drop следует использовать с осторожностью.

Теперь восстановим определенную коллекцию (например, posts1 из DB1) из резервной копии всех баз данных:

$ mongorestore --drop --dir /tmp/backup_v2 --nsInclude "DB1.posts1"

Восстановить все базы данных и все коллекции, кроме определенной коллекции (например, posts1 из DB1):

$ mongorestore --drop --dir /tmp/backup_v2 --nsExclude "DB1.posts1"

Резервное копирование всех баз данных со сжатием

Теперь создайте резервную копию и сожмите файл резервной копии:

$ mkdir /tmp/backup_v3
$ mongodump --gzip --out /tmp/backup_v3

Теперь просмотрите файл резервной копии:

$ ls -la /tmp/backup_v3/db1

Здесь файл резервной копии содержит сжатые файлы.

Теперь восстановите данные из такой резервной копии:

$ mongorestore --gzip --drop --dir /tmp/backup_v3

Резервное копирование всех баз данных со сжатием в один архив (.gz)

Создайте резервную копию всех баз данных со сжатием в один архив (.gz):

$ mkdir /tmp/backup_v4/
$ mongodump --gzip --archive=/tmp/backup_v4/my_backup.gz

Теперь восстановите данные из резервной копии с помощью следующей команды:

$ mongorestore --gzip --drop --archive=/tmp/backup_v4/my_backup.gz

Резервное копирование конкретной базы данных

Создать резервную копию определенной базы данных

$ mkdir /tmp/backup_v5
$ mongodump --gzip --out /tmp/backup_v5 --db DB2

Восстановите данные из этой резервной копии:

$ mongorestore --gzip --drop --dir /tmp/backup_v5

Резервное копирование одной коллекции address2 из DB2

Создайте резервную копию одной коллекции address2 из DB2.

$ mkdir /tmp/backup_v6
$ mongodump --gzip --out /tmp/backup_v6 --db DB2 -c address2

Создайте резервную копию всей DB2, кроме одной коллекции posts2.

Создайте резервную копию всей DB2, кроме одной коллекции posts2.

$ mkdir /tmp/backup_v7
$ mongodump --gzip --out /tmp/backup_v7 --db DB2 --excludeCollection posts2