MongoDB Academy · Урок

mongodump и mongorestore для полного резервного копирования

Вы создадите полный дамп BSON базы данных и восстановите его в другом кластере с помощью mongorestore.

Урок 3 из 413 шагов

«mongodump и mongorestore для полного резервного копирования» — бесплатный урок MongoDB Academy на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения MongoDB Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс MongoDB Academy содержит 4 уроков всего.

Зачем использовать mongodump для резервного копирования

mongodump создаёт двоичный снимок BSON базы данных или коллекции. В отличие от mongoexport, создающей удобочитаемый JSON, mongodump точно сохраняет всю информацию о типах BSON — ObjectIds, даты, десятичные числа и двоичные данные — без малейшей потери точности. Поэтому mongodump — правильный инструмент для полного резервного копирования и миграции баз данных между кластерами MongoDB, тогда как mongoexport лучше подходит для выборочного обмена данными.

Основы использования mongodump

Если запустить mongodump без аргументов, все базы данных локального экземпляра MongoDB будут выгружены в каталог dump/. Укажите --uri, --db и при необходимости --collection, чтобы сузить область выгрузки. Выходной каталог содержит по одному подкаталогу для каждой базы данных, а в каждом из них — файлы .bson и .metadata.json для каждой коллекции.

# Dump the entire 'myapp' database
mongodump \
  --uri 'mongodb://localhost:27017' \
  --db myapp \
  --out /backups/myapp-2024-01-15

# Output structure:
# /backups/myapp-2024-01-15/
#   myapp/
#     users.bson
#     users.metadata.json
#     products.bson
#     products.metadata.json

Выгрузка одной коллекции

Используйте --collection, чтобы выгрузить только одну коллекцию из базы данных. В результате создаются один файл .bson и соответствующий ему файл .metadata.json, в котором хранятся определения индексов. Целевая выгрузка коллекции удобна, когда нужно извлечь одну коллекцию для миграции, не создавая резервную копию всей базы данных.

# Dump only the 'orders' collection
mongodump \
  --uri 'mongodb://localhost:27017' \
  --db myapp \
  --collection orders \
  --out /backups/orders-backup

# Result: /backups/orders-backup/myapp/orders.bson
#         /backups/orders-backup/myapp/orders.metadata.json

Сжатие выгрузки

Большие выгрузки BSON могут занимать значительный объём дискового пространства. Используйте --gzip, чтобы сжимать выходные файлы по мере их записи. Каждый файл .bson превращается в файл .bson.gz, что для обычных коллекций документов обычно даёт сжатие в 5–10 раз. Сжатие выполняется в процессе mongodump, а для распаковки в mongorestore требуется соответствующий флаг --gzip.

# Create a compressed backup
mongodump \
  --uri 'mongodb://localhost:27017' \
  --db myapp \
  --gzip \
  --out /backups/myapp-compressed-2024-01-15

# Files are now .bson.gz:
# /backups/myapp-compressed-2024-01-15/myapp/users.bson.gz
# /backups/myapp-compressed-2024-01-15/myapp/orders.bson.gz

Архивирование в один файл

Используйте --archive, чтобы записать всю выгрузку в один архивный файл вместо дерева каталогов. Также можно передать её в gzip или aws s3 cp, чтобы за один шаг сжать резервную копию и загрузить её. Это наиболее компактный и переносимый формат выгрузки для автоматизации резервного копирования в CI или заданиях cron.

# Archive + compress to a single file
mongodump \
  --uri 'mongodb://localhost:27017' \
  --db myapp \
  --archive=/backups/myapp-2024-01-15.archive.gz \
  --gzip

# Or pipe to gzip
mongodump \
  --uri 'mongodb://localhost:27017' \
  --db myapp \
  --archive | gzip > /backups/myapp-2024-01-15.gz

Основы использования mongorestore

mongorestore читает каталог или архив, созданный с помощью mongodump, и вставляет документы в целевой кластер MongoDB. После загрузки данных команда воссоздаёт коллекции вместе с их определениями индексов из файлов .metadata.json. Укажите целевой кластер с помощью --uri, а исходный каталог или архив — с помощью --dir или --archive.

# Restore the full myapp database from a directory backup
mongorestore \
  --uri 'mongodb://restore-target:27017' \
  --dir /backups/myapp-2024-01-15

# Restore a gzip-compressed directory backup
mongorestore \
  --uri 'mongodb://restore-target:27017' \
  --gzip \
  --dir /backups/myapp-compressed-2024-01-15

Восстановление под другим именем базы данных

По умолчанию mongorestore восстанавливает данные с тем же именем базы данных, которое указано в выгрузке. Используйте --nsFrom и --nsTo (пространство имён: исходное и целевое), чтобы восстановить данные под другим именем базы данных или коллекции. Это особенно важно при клонировании рабочих данных в промежуточную базу данных с другим именем.

# Restore 'myapp' from dump into 'myapp_staging'
mongorestore \
  --uri 'mongodb://localhost:27017' \
  --nsFrom 'myapp.*' \
  --nsTo 'myapp_staging.*' \
  --dir /backups/myapp-2024-01-15

Флаг --drop при восстановлении

Как и mongoimport, mongorestore поддерживает флаг --drop, который удаляет каждую коллекцию перед её восстановлением. Без --drop mongorestore объединяет восстановленные документы с уже существующими данными — это удобно для частичного восстановления. С --drop Вы получаете чистую замену коллекции, что безопаснее при полном восстановлении базы данных и предотвращает смешивание устаревших данных с резервной копией.

# Drop and fully replace all collections during restore
mongorestore \
  --uri 'mongodb://localhost:27017' \
  --db myapp \
  --drop \
  --dir /backups/myapp-2024-01-15/myapp

Параллельное восстановление с помощью --numParallelCollections

Для баз данных с большим количеством коллекций mongorestore может восстанавливать несколько коллекций параллельно. Используйте --numParallelCollections (по умолчанию: 4), чтобы увеличить степень параллелизма на серверах с высокой пропускной способностью ввода-вывода. Параллельное восстановление сокращает общее время, но увеличивает потребление памяти и CPU на клиенте и сервере.

# Restore 8 collections in parallel
mongorestore \
  --uri 'mongodb://restore-target:27017' \
  --dir /backups/myapp-2024-01-15 \
  --numParallelCollections 8

Автоматизация резервного копирования с помощью задания Cron

Автоматизируйте ежедневное резервное копирование, запуская оболочечный сценарий из задания cron. Сценарий создаёт каталог резервной копии с отметкой времени, запускает mongodump, сжимает результат и при необходимости загружает его в S3 или другое удалённое хранилище. Всегда проверяйте код завершения mongodump, чтобы обнаружить неудачное резервное копирование до того, как предыдущая резервная копия будет перезаписана.

#!/bin/bash
DATE=$(date +%Y%m%d)
BACKUP_DIR="/backups/myapp-$DATE"

mongodump \
  --uri "$MONGO_URI" \
  --db myapp \
  --gzip \
  --out "$BACKUP_DIR"

if [ $? -eq 0 ]; then
  echo "Backup successful: $BACKUP_DIR"
else
  echo "Backup FAILED!"
  exit 1
fi

Резервные копии на определённый момент времени в Atlas

MongoDB Atlas предоставляет автоматические резервные копии на определённый момент времени (PIT): снимки создаются каждые 6 часов, а восстановление возможно на любую секунду в пределах периода хранения — до 35 дней на уровнях M10 и выше. Резервные копии Atlas не используют mongodump: на уровне подсистемы хранения применяются снимки файловой системы, не влияющие на работу базы данных. Для самостоятельно размещаемого MongoDB mongodump является основным механизмом резервного копирования, однако это логическая резервная копия, которая не может захватывать выполняющиеся транзакции.

Быстрая проверка

Проверьте, насколько хорошо Вы поняли концепции MongoDB и баз данных NoSQL из этого урока.

Итоги урока

В этом уроке Вы узнали, что mongodump создаёт двоичные резервные копии BSON, сохраняя всю информацию о типах, mongorestore читает эти выгрузки и воссоздаёт коллекции вместе с их индексами, а флаги --drop, --nsFrom/--nsTo и --gzip необходимы для рабочих процессов резервного копирования в рабочей среде. Далее мы напишем скрипты заполнения на Node.js, чтобы программно загружать данные в MongoDB во время разработки.

Можно начать бесплатно

Изучай JavaScript с ИИ-репетитором — бесплатно

Пиши и запускай код прямо в браузере, получай мгновенную помощь от ИИ-репетитора 24/7 и продолжи учиться на сайте или в приложении.

Курсы
30
Уроки
120

Часто задаваемые вопросы

Урок «mongodump и mongorestore для полного резервного копирования» бесплатный?

Да — полный текст урока «mongodump и mongorestore для полного резервного копирования» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс MongoDB Academy, подпишись на CoddyKit PRO. Курс MongoDB Academy содержит 4 уроков всего.

Чему я научусь в уроке «mongodump и mongorestore для полного резервного копирования»?

Вы создадите полный дамп BSON базы данных и восстановите его в другом кластере с помощью mongorestore. Ты практикуешь MongoDB Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать MongoDB Academy?

Предыдущий опыт не требуется. MongoDB Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.

Сколько времени занимает урок «mongodump и mongorestore для полного резервного копирования»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке MongoDB Academy?

Да. Каждый урок MongoDB Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. mongoimport: загрузка файлов JSON и CSV
  2. mongoexport: выгрузка коллекций в файлы
  3. mongodump и mongorestore для полного резервного копирования
  4. Заполнение данных с помощью скриптов Node.js
← Назад к MongoDB Academy