Как сделать бэкап базы данных MongoDB

Как сделать бэкап базы данных MongoDB

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

Внимание. До того как приступим к туториалу, хочу предупредить, что все команды в этой статье должны исполняться без привилегии root.

Создание резервной копии базы данных MongoDB

Для создания бэкапов нужно пользоваться командой mongodump. Пожалуй самым важным аргумент этой команды является --db, с помощью которого можно указать бэкап какой именно базы нужно сделать. Если этот аргумент опущен, то mongodump сделает бэкап всех баз данных.

Вторым важным аргументом является --out, с помощью которого указывается директория куда нужно положить все бэкап-данные.

Теперь когда разобрались с аргументами, давайте покажу на примере. Допустим мне нужно сделать резервную копию базы данных с названием blog и положить бэкап в директорию ~/mongodumps. Для этого сперва нужно создать пресловутую директорию:

mkdir ~/mongodumps

После этого можно делать бэкап MongoDB следующей командой:

mongodump --db blog --out ~/mongodumps/`date + "%m-%d-%y"`

Обратите внимание, что этот пример будет класть бэкапы каждый день в отдельную директорию.

Автоматизация бэкапов баз данных MongoDB

Если желаете автоматизировать процесс, то можно добавить новую CRON-задачу:

crontab -e

Внутри crontab-файла добавьте следующее:

# Делает бэкапы баз данных MongoDB каждый день в 3:03
3 3 * * * mongodump --out $HOME/mongobackups/`date +"%m-%d-%y"`

Если желаете избавляться от бэкапов, которые старше 7 дней, то можете добавить в CRON и следующую задачу:

# Очищает бэкапы старше 7 дней
3 1 * * * find $HOME/mongobackups/ -mtime +7 -exec rm -rf {} \;

Восстановление / миграция бэкапов MongoDB

Восстановление с бэкапа позволяет вам иметь точно такую же копию данных, включая индексы и данные. Для восстановления используется команда mongorestore.

Команда восстановления выглядит примерно так:

mongorestore --db blog --drop ~/mongobackups/01-01-18/blog/

Не буду объяснять для чего используется тут аргумент --db, и так-то ясно. Заместо этого, объясню какую функцию исполняет аргумент --drop. Когда используете этот аргумент, команда удалит существующую базу данных с таким же названием. Это для того, чтобы убедиться, что вы восстанавливаете бэкап в "чистую" базу.