Могу ли я сделать резервную копию базы данных MongoDB с помощью Git? В частности, могу ли я включить каталог данных mongo в репозиторий github?

Я довольно новичок в Node + Mongo и пытаюсь выяснить, есть ли способ сделать резервную копию моей базы данных каждый раз, когда я делаю новый коммит. Это возможно? Я знаю, как выполнять резервное копирование с помощью mongodump, но я бы предпочел избегать делать это каждый раз, когда я отправляю на сервер. Если идея каталога данных не работает, можно ли написать сценарий, который выполняет резервное копирование в мой репозиторий узлового сервера, а затем выполняет ли push каждый раз, когда я его запускаю?

Я не смог найти в Интернете ничего, касающегося мерзавцев и монго, поэтому я думаю, что, возможно, смотрю на это неправильно / не понимаю что-то. Любая помощь будет принята с благодарностью! Спасибо!

2 ответа

Решение

Все, что вам нужно, это MMS(служба мониторинга Монго). Это облачная служба непрерывного резервного копирования (плюс множество средств автоматизации, таких как восстановление по требованию, мониторинг), предлагаемых MongoDB. С MMS каждый раз, когда вы делаете коммит, резервное копирование БД происходит постепенно. Также возможно легко развернуть и контролировать автономную, реплицированную или сегментированную установку.

MMS лучше по сравнению с mongodump, поскольку имеет тенденцию делать инкрементное резервное копирование по сравнению с резервным копированием всей базы данных. Написание скрипта, который выполняет mongodump при каждом коммите, будет работать, но вам придется удалять старый файл резервной копии каждый раз, когда вы хотите сделать резервную копию для нового коммита, MMS сокращает эту нагрузку, управляя всеми этими усилиями (написание сценариев, как упомянуто), которые входят в роль DBA.

Проверьте эту ссылку для получения дополнительной информации: MMS

Git крючки

Если вы хотите, чтобы какое-то действие запускалось при каждом коммите, git действительно имеет понятие "ловушки", которые позволяют вам вызывать исполняемые скрипты.

Например, вы можете добавить pre-commit или же post-commit крюк, который работает mongodump резервное копирование (в сценарии оболочки) до или после успешной фиксации в зависимости от ситуации.

Каталог данных

В частности, могу ли я включить каталог данных mongo в репозиторий github?

Я бы не включил каталог данных в ваш репозиторий Git, так как файлы данных заблокированы для монопольного доступа, когда запущена MongoDB. Копирование файлов, используемых бегом mongod Экземпляр может привести к повреждению или непригодности для "резервного копирования".

Файлы двоичных данных также значительно раздувают ваш репозиторий, поскольку они (как в MongoDB 2.6) находятся в несжатом двоичном формате, который включает в себя некоторое предварительно выделенное / неиспользуемое хранилище. Если вы хотите хранить полные резервные копии данных в системе контроля версий, я бы сделал резервную копию с помощью mongodumpи сожмите результирующий выходной каталог с помощью zip или tar + gzip перед проверкой в ​​управлении версиями.

альтернативы

Полное резервное копирование базы данных при каждом коммите может занять много времени и дискового пространства. В зависимости от ваших проблем / требований к резервному копированию базы данных при каждом коммите, некоторые альтернативные подходы:

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

  • Если вас больше волнуют изменения в структуре ваших данных или конкретных требуемых данных (а не полной базы данных), вы можете использовать среду миграции (например, mongo-migrate). Использование явных "сценариев миграции" для внесения изменений в структуру данных позволяет вам гарантировать, что данные и структура соответствуют тому, что ваш код ожидает от данной проверки (связанные сценарии.migrate будут включены в фиксацию кода). Это также полезный подход, если вы работаете с командой разработчиков и хотите убедиться, что у всех есть одинаковые данные (без проверки полных дампов).

  • Как упомянуто @vmr, вы можете использовать службу резервного копирования, такую ​​как MMS (MongoDB Management Service), для регулярного резервного копирования. Облачная версия MMS Backup может быть восстановлена ​​на определенный момент времени за последние 24 часа.

Другие вопросы по тегам