Сегодня я хотел бы поделиться со всеми читателями об одной системе управления базами данных, не требующая описания схемы таблиц, правильно - это MongoDB СУБД считается одной из классических примеров NoSQL-систем. Документы состоят из пар ключ-значение, которые являются основной единицей данных в MongoDB. Коллекции содержат наборы документов и функции, которые эквивалентны таблицам реляционной базы данных. MongoDB — это база данных, появившаяся в середине 2000-х годов. Про установку не буду ничего описывать все и так понятно из официального гайда Всем добро пожаловать.
https://docs.mongodb.com/v5.0/administration/install-community/
В этой статье буду показывать о том, как настроить резервное копирование данных, и потом восстановить. На самом деле это не так все сложно, и даже скажу больше интуитивно понятно
Не буду задерживать всех своей писаниной и сразу приступим к делу. Мануал заточен на то, что у вас уже установлена СУБД из официального гайда. Единственное скажу, что я буду показывать все на машинке с Линуксом, ОС Ubuntu 20.04.2 LTS
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)
Надеюсь, что любому кто столкнется с такой задачей, прочитав эту статью будет понятно, как работать с этой СУБД. Всем спасибо за чтение данной статьи!
habr.com
https://docs.mongodb.com/v5.0/administration/install-community/
В этой статье буду показывать о том, как настроить резервное копирование данных, и потом восстановить. На самом деле это не так все сложно, и даже скажу больше интуитивно понятно
Формат данных в 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)
Надеюсь, что любому кто столкнется с такой задачей, прочитав эту статью будет понятно, как работать с этой СУБД. Всем спасибо за чтение данной статьи!

MongoDB — Захватывает мир. Семь способов резервного копирования и восстановления данных
Привет Хабр, и привет читателям. Не очень долго пришлось ждать выхода моей новой статьи. Спасибо всем, кто дал feedback по моей прошлой статье . Было очень приятно пообщаться с единомышленниками....
