Вступление
Сегодня многие разработчики современных веб-приложений предпочитают использовать базу данных NoSQL в своих проектах, и MongoDB часто является их первым выбором. Если вы используете MongoDB в производственном сценарии, важно регулярно создавать резервные копии, чтобы избежать потери данных. К счастью, MongoDB предлагает простые инструменты командной строки для создания и использования резервных копий. Этот урок объяснит, как использовать эти инструменты.
Чтобы понять, как работают резервные копии без вмешательства в существующие базы данных, этот учебник начнется с того, как вы создадите новую базу данных и добавите в нее небольшой объем данных. Затем вы создадите резервную копию базы данных, затем удалите базу данных и восстановите ее, используя резервную копию.
Предпосылки
Чтобы следовать, вам понадобится:
-
Одна 64-битная капля Ubuntu 14.04 с sudo некорневым пользователем
-
MongoDB 3.0.7 установлен на вашем сервере, что вы можете сделать, следуя https://www.digitalocean.com/community/tutorials/how-to-install-mongodb-on-ubuntu-14-04 далее это руководство по установке MongoDB]
Шаг 1 - Создание примера базы данных
Создание резервной копии пустой базы данных не очень полезно, поэтому на этом шаге мы создадим пример базы данных и добавим в нее некоторые данные.
Самый простой способ взаимодействия с экземпляром MongoDB - использовать оболочку + mongo +
. Откройте его командой + mongo +
.
mongo
Получив приглашение MongoDB, создайте новую базу данных с именем * myDatabase *, используя помощник + use +
.
use myDatabase
Выход
switched to db myDatabase
Все данные в базе данных MongoDB должны принадлежать collection. Однако вам не нужно создавать коллекцию явно. Когда вы используете метод + insert +
для записи в несуществующую коллекцию, коллекция создается автоматически перед записью данных.
Вы можете использовать следующий код, чтобы добавить три небольших документа в коллекцию с именем * myCollection *, используя метод + insert +
:
db.myCollection.insert([
{'name': 'Alice', 'age': 30},
{'name': 'Bill', 'age': 25},
{'name': 'Bob', 'age': 35}
]);
Если вставка прошла успешно, вы увидите сообщение, которое выглядит следующим образом:
Вывод успешной операции вставки ()
BulkWriteResult({
"writeErrors" : [ ],
"writeConcernErrors" : [ ],
"nInserted" : 3,
"nUpserted" : 0,
"nMatched" : 0,
"nModified" : 0,
"nRemoved" : 0,
"upserted" : [ ]
})
Шаг 2 - Проверка размера базы данных
Теперь, когда у вас есть база данных, содержащая данные, вы можете создать для нее резервную копию. Однако резервные копии будут большими, если у вас большая база данных, и во избежание риска нехватки дискового пространства и, как следствие, замедления или сбоя сервера, вы должны проверить размер базы данных, прежде чем создавать резервную копию.
Вы можете использовать метод + stats +
и проверить значение ключа + dataSize +
, чтобы узнать размер вашей базы данных в байтах.
db.stats().dataSize;
Для текущей базы данных значение + dataSize +
будет небольшим числом:
Вывод db.stats (). Datasize
592
Обратите внимание, что значение + dataSize +
является лишь приблизительной оценкой размера резервной копии.
Шаг 3 - Создание резервной копии
Для создания резервной копии вы можете использовать утилиту командной строки под названием + mongodump +
. По умолчанию + mongodump +
создаст резервную копию всех баз данных, представленных в экземпляре MongoDB. Чтобы создать резервную копию определенной базы данных, вы должны использовать опцию + -d +
и указать имя базы данных. Кроме того, чтобы + mongodump +
знал, где хранить резервную копию, вы должны использовать опцию + -o +
и указать путь.
Если вы все еще находитесь в оболочке + mongo +
, выйдите из нее, нажав + CTRL + D +
.
Введите следующую команду, чтобы создать резервную копию * myDatabase * и сохранить ее в + ~ / backups / first_backup +
:
mongodump -d myDatabase -o ~/backups/first_backup
Если создание резервной копии прошло успешно, вы увидите следующие сообщения журнала:
Журналы успешного создания резервной копии
2015-11-24T18:11:58.590-0500 writing myDatabase.myCollection to /home/me/backups/first_backup/myDatabase/myCollection.bson
2015-11-24T18:11:58.591-0500 writing myDatabase.myCollection metadata to /home/me/backups/first_backup/myDatabase/myCollection.metadata.json
2015-11-24T18:11:58.592-0500 done dumping myDatabase.myCollection (3 documents)
2015-11-24T18:11:58.592-0500 writing myDatabase.system.indexes to /home/me/backups/first_backup/myDatabase/system.indexes.bson
Обратите внимание, что резервная копия не является одним файлом; на самом деле это каталог, имеющий следующую структуру:
Структура каталогов резервного копирования MongoDB
first_backup
└── myDatabase
├── myCollection.bson
├── myCollection.metadata.json
└── system.indexes.bson
Шаг 4 - Удаление базы данных
Чтобы проверить созданную резервную копию, вы можете использовать экземпляр MongoDB, запущенный на другом сервере, или удалить базу данных на текущем сервере. В этом уроке мы сделаем последнее.
Откройте оболочку + mongo +
и подключитесь к * myDatabase *.
mongo myDatabase
Удалите базу данных, используя метод + dropDatabase +
.
db.dropDatabase();
Если удаление прошло успешно, вы увидите следующее сообщение:
Вывод dropDatabase ()
{ "dropped" : "myDatabase", "ok" : 1 }
Теперь вы можете использовать метод + find +
вашей коллекции, чтобы увидеть, что все данные, которые вы вставили ранее, исчезли.
db.myCollection.find();
Эта команда не будет выводить данные, поскольку в базе данных нет данных для отображения.
Шаг 5 - Восстановление базы данных
Чтобы восстановить базу данных с помощью резервной копии, созданной с помощью + mongodump +
, вы можете использовать другую утилиту командной строки под названием + mongorestore +
. Прежде чем использовать его, выйдите из оболочки + mongo +
, нажав + CTRL + D +
.
Использовать + mongorestore +
очень просто. Все, что ему нужно, это путь к каталогу, содержащему резервную копию. Вот как вы можете восстановить вашу базу данных, используя резервную копию, хранящуюся в + ~ / backupts / first_backup +
:
mongorestore ~/backups/first_backup/
В случае успешного восстановления вы увидите следующие сообщения журнала:
Успешное восстановление логов
2015-11-24T18:27:04.250-0500 building a list of dbs and collections to restore from /home/me/backups/first_backup/ dir
2015-11-24T18:27:04.251-0500 reading metadata file from /home/me/backups/first_backup/myDatabase/myCollection.metadata.json
2015-11-24T18:27:04.252-0500 restoring myDatabase.myCollection from file /home/me/backups/first_backup/myDatabase/myCollection.bson
2015-11-24T18:27:04.309-0500 restoring indexes for collection myDatabase.myCollection from metadata
2015-11-24T18:27:04.310-0500 finished restoring myDatabase.myCollection (3 documents)
2015-11-24T18:27:04.310-0500 done
Чтобы проверить восстановленные данные, сначала откройте оболочку + mongo
и подключитесь к` + Database`.
mongo myDatabase
Затем вызовите метод + find
для вашей` + collection`.
db.myCollection.find();
Если все прошло хорошо, теперь вы сможете увидеть все данные, которые вы вставили ранее.
Вывод find ()
{ "_id" : ObjectId("5654e76f21299039c2ba8720"), "name" : "Alice", "age" : 30 }
{ "_id" : ObjectId("5654e76f21299039c2ba8721"), "name" : "Bill", "age" : 25 }
{ "_id" : ObjectId("5654e76f21299039c2ba8722"), "name" : "Bob", "age" : 35 }
Заключение
В этом руководстве вы узнали, как использовать + mongodump +
и + mongorestore +
для резервного копирования и восстановления базы данных MongoDB. Обратите внимание, что создание резервной копии является дорогостоящей операцией и может снизить производительность вашего экземпляра MongoDB. Поэтому рекомендуется создавать резервные копии только в непиковые часы.
Чтобы узнать больше о стратегиях резервного копирования MongoDB, вы можете обратиться к руководству MongoDB 3.0.