Резервное копирование MongoDB в Ubuntu 14.04
Ubuntu | Комментировать запись
Сегодня многие разработчики веб-приложений предпочитают использовать в своих проектах базы данных NoSQL, и они часто выбирают MongoDB. При использовании MongoDB в производстве важно регулярно создавать резервные копии данных. Для этого СУБД MongoDB предоставляет простой инструмент командной строки.
Данное руководство научит вас пользоваться этим инструментом.
Требования
- 64-битный сервер Ubuntu 14.04
- Не-root пользователь с доступом к sudo.
- Предварительно установленная СУБД MongoDB 3.0.7 (инструкции по установке можно найти здесь).
1: Создание тестовой БД
Создайте тестовую базу данных и добавьте в неё какие-нибудь данные.
Для взаимодействия с MongoDB используется оболочка mongo. Откройте её:
mongo
Получив доступ к командной строке MongoDB, создайте новую БД по имени myDatabase:
use myDatabase
Команда вернёт:
switched to db myDatabase
Все данные в MongoDB должны принадлежать к какой-нибудь коллекции. Однако явно создавать коллекцию не обязательно. Команда insert позволяет вносить данные в несуществующие коллекции; точнее, эта команда создаёт коллекцию автоматически.
Чтобы добавить три небольших документа в коллекцию myCollection, введите:
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;
В данном случае команда вернула:
592
Обратите внимание: dataSize – это только приблизительная оценка размеров резервной копии.
3: Бэкап данных MongoDB
Чтобы создать бэкап, используйте утилиту mongodump. По умолчанию mongodump создаёт резервную копию всех существующих баз данных. Чтобы создать бэкап конкретной БД, используйте опцию –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
Обратите внимание: резервная копия состоит из нескольких файлов.
first_backup
└── myDatabase
├── myCollection.bson
├── myCollection.metadata.json
└── system.indexes.bson
4: Удаление БД
Чтобы протестировать созданную резервную копию, можно либо использовать экземпляр MongoDB, установленный на другом сервере, либо удалить БД на текущем сервере.
Попробуйте удалить текущую БД.
Откройте оболочку mongo и подключитесь к myDatabase.
mongo myDatabase
Удалите БД при помощи метода dropDatabase:
db.dropDatabase();
Команда должна вернуть:
{ "dropped" : "myDatabase", "ok" : 1 }
Теперь можно использовать метод find, чтобы убедиться, что БД удалена.
db.myCollection.find();
Эта команда не вернёт никакого результата.
5: Восстановление резервной копии
Чтобы восстановить данные из резервной копии, используйте утилиту 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 и подключитесь к базе данных.
mongo myDatabase
Вызовите метод find для коллекции:
db.myCollection.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 3.0.
Tags: MongoDB, NoSQL, Ubuntu 14.04