Как создавать и использовать резервные копии MongoDB в Ubuntu 14.04

Вступление

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

Related