Резервное копирование MongoDB в Ubuntu 14.04

Сегодня многие разработчики веб-приложений предпочитают использовать в своих проектах базы данных 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: , ,

Добавить комментарий