Хотите сделать инкрементную резервную копию для mongodb. Ведение журнала? Оплог?

Я хочу делать ежедневные резервные копии для одной базы данных mongodb, возможно, с помощью mongodump. Чтобы не потерять данные, я бы хотел, чтобы это было инкрементным, поэтому, если что-то пойдет не так в середине дня, мне нужно иметь возможность воспроизвести изменения за этот день до точки сбоя после выполнения mongorestore.

Я правильно понимаю, что для этого мне нужно использовать oplog? Или ведение дневника является ответом? Я попытался сделать следующее:

  1. Превращение моей базы данных mongo в набор реплик только из одной, чтобы создать oplog. (Это кажется довольно хакерским)
  2. Перезапуск mongod с опцией --oplog
  3. Выполнение изменений, которые должны быть записаны в oplog

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

Спасибо


person Alex Lopatin    schedule 15.08.2012    source источник


Ответы (2)


MongoDB не предоставляет опции инкрементного резервного копирования «из коробки», но можно сделать снимок файла и воспроизвести oplog. Вы настроили свой сервер как набор реплик, следуя шагам, описанным в документации? http://www.mongodb.org/display/DOCS/Replica+Sets+-+Basics

Не могли бы вы также рассказать нам о цели этих резервных копий? Рассматривали ли вы возможность добавления второго узла в набор реплик для обеспечения надежности данных?

Если вы выполнили шаги по настройке сервера как члена набора реплик, можете ли вы запустить rs.status() в оболочке?

Еще одно замечание (просто для уточнения): ведение журнала не предназначено для стратегии резервного копирования; ведение журнала просто гарантирует, что база данных может вернуться в согласованное состояние в случае аварийного переключения. Настоятельно рекомендуется работать с включенным ведением журнала.

Вот документация MongoDB по резервным копиям: http://www.mongodb.org/display/DOCS/Backups

person Jenna    schedule 16.08.2012
comment
Спасибо за разъяснение, вчера я изучил это подробнее и понял, что должно произойти. Что я хочу сделать, так это сделать ежедневный mongodump, сохранить его на S3, а также каждый час сохранять мой oplog на S3. У меня есть два дополнительных вопроса, если вы будете так любезны: 1. Мой oplog хранится в локальной базе данных, и теперь я могу получить к нему доступ из оболочки mongo. Чтобы сделать резервную копию оплога, могу ли я просто скопировать все мои файлы local.(1-N) и local.ns на s3? 2. Как лучше всего воспроизводить оплоги? Достаточно ли для этого mongorestore --oplogReplay? Большое спасибо! - person Alex Lopatin; 17.08.2012
comment
mongodump --oplog гарантирует, что любые записи oplog, созданные во время дампа, могут быть воспроизведены с помощью mongorestore --oplogReplay. Вы не можете использовать mongorestore --oplogReplay для воспроизведения операций oplog, которые произошли после завершения дампа. Одно из решений, которое вы можете исследовать, — это ежечасно создавать дамп коллекции oplog и использовать команду applyOps: docs.mongodb.org/manual/reference/commands/#applyOps - person Jenna; 17.08.2012
comment
Это может быть хакерским... но я думаю, что использование mongorestore --oplogReplay действительно сработало. Что я сделал, так это mongodump oplog, переместил полученный «oplog.rs.bson» в «dump/oplog.bson» и запустил mongorestore --oplogReplay. Это опасно? Если это так, я обязательно выберу технику applyOps. - person Alex Lopatin; 17.08.2012
comment
Привет, Алекс, если быть до конца честным, поскольку MongoDB не предназначена для воспроизведения оплога таким образом, я не могу подтвердить, целесообразен ли этот метод. Лучшим и самым безопасным решением может быть дамп оплога и написание скрипта, который применяет эти операции. Возможно, вы захотите изучить mongooplog, инструмент, который будет доступен в следующей стабильной версии MongoDB (выходит очень скоро): docs.mongodb.org/manual/reference/mongooplog - person Jenna; 17.08.2012

Лучший способ сделать резервную копию — настроить Ops Manager как часть ваша инфраструктура MongoDB, но она делает гораздо больше, чем просто резервное копирование...

person Ostati    schedule 27.09.2015