Поиск по сайту:

Как сделать резервную копию и перенести базу данных MongoDB


Миграция баз данных — это то, что рано или поздно приходится делать каждому системному администратору. К счастью, MongoDB предоставляет встроенные команды для создания и восстановления из резервных копий, что упрощает миграцию на новый сервер.

Использование mongodump для создания резервной копии

mongodump — это простая команда, которая создаст файл резервной копии базы данных и ее коллекций, из которых вы сможете восстановить. Это потребует некоторого простоя, пока выполняется резервное копирование и запускается новый сервер.

Если вы не хотите простоев, вы можете выполнить миграцию кластера, добавив новый узел в свой кластер, установив его в качестве основного источника записи, а затем переключившись на новый узел в горячем режиме. Это становится намного проще, если вы используете MongoDB Atlas, их службу управляемой базы данных.

mongodump намного проще. Вам нужно создать каталог для резервных копий:

sudo mkdir /var/backups/mongobackups

Затем запустите mongodump, передав его в качестве параметра базы данных и выходного местоположения:

sudo mongodump --db databasename --out /var/backups/mongobackups/backup

Вы также можете вручную создать дамп определенных коллекций с помощью флага --collection.

Mongodump можно запустить в действующей базе данных, и для создания резервной копии требуется всего несколько секунд. Однако любые записи в базу данных будут фактически потеряны, поскольку вы перемещаете серверы. Из-за этого вам нужно отключить трафик перед созданием дампа.

Восстановление из резервной копии

Вам нужно будет перенести файл резервной копии со старого сервера на новый сервер. Это можно сделать, загрузив его по FTP, а затем загрузив на новый сервер, но для больших резервных копий лучше всего установить прямое соединение и передать его с помощью scp.

Вы можете использовать следующую команду, заменив имена пользователей и имена хостов значениями для ваших серверов.

scp user@SRC_HOST:/var/backups/mongobackups/FILENAME  user@DEST_HOST:~/FILENAME

Затем, когда у вас есть резервная копия на новом сервере, вы можете загрузиться из резервной копии. Вам, конечно, потребуется установить MongoDB на новый сервер.

Для этого вы можете использовать команду mongorestore:

mongorestore <options> <connection-string> <file to restore>

Вы должны немедленно увидеть новую таблицу, доступную в новой базе данных.

Убедившись, что все перенесено правильно, вам нужно будет перенаправить трафик на новый сервер, вероятно, обновив записи DNS. Если вы используете AWS или аналогичный провайдер с эластичными IP-адресами, вы можете поменять адрес, чтобы он указывал на новый сервер, который не потребует обновления DNS.

Перенос всего диска (необязательно)

При желании, если вы просто переходите на более мощный сервер, вы можете перенести весь загрузочный диск, который должен скопировать базу данных вместе с остальной конфигурацией сервера.

В этом случае вам нужно будет использовать команду rsync для прямой загрузки данных на целевой сервер. rsync подключится с помощью SSH и синхронизирует две папки; в этом случае мы хотим передать локальную папку на удаленный сервер:

sudo rsync -azAP / --exclude={"/dev/*","/proc/*","/sys/*","/tmp/*","/run/*","/mnt/*","/media/*","/lost+found"} username@remote_host:/

Вот и вся команда. Вы должны увидеть индикатор выполнения по мере завершения передачи (используя сжатие с флагом -z), а когда это будет сделано, вы увидите файлы в целевой папке на новом сервере. Возможно, вам придется запустить это несколько раз, чтобы скопировать каждую папку; вы можете использовать этот онлайн-генератор команд rsync для создания команды для каждого запуска.