Как создать резервную копию и восстановить базу данных MongoDB?
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