Я прочитал в официальной документации MongoDB:
важно: db.fsyncLock () может блокировать чтение, включая те, которые необходимы для проверки аутентификации. Предупреждение: при вызове db.fsyncLock () убедитесь, что соединение остается открытым, чтобы разрешить последующий вызов db.fsyncUnlock (). Закрытие соединения может затруднить снятие блокировки.
В худшем случае я использую fsyncLock (), который блокирует базу данных, но затем я внезапно теряю соединение с базой данных из-за временного сбоя сети. В этом случае я не могу повторно подключиться, потому что fsyncLock () блокирует считыватель. Моя база данных будет заблокирована навсегда.
Сейчас я подумываю о том, чтобы закрыть mongodb, чтобы сделать резервную копию. Какое самое безопасное решение для резервного копирования для одного монгода?
Какое самое безопасное решение для резервного копирования для одного монгода?
Два варианта:
mongodump
против бега mongod
. Он не будет блокировать, но вызовет некоторую блокировку чтения и общий шум при резервном копировании ваших баз данных. Обычно это не имеет большого значения, если у вас нет большого количества конфликтов за базу данных.mongodump --dbpath
против этих файлов.На самом деле у вас должен быть набор реплик и резервное копирование на вторичный.
В зависимости от вашей настройки решение может быть разным.
Предлагаю вам прочитать Резервное копирование и восстановление главу документации mongo, чтобы решить, как это реализовать.
Если вы решите реализовать решение «Снимок файловой системы», которое я предпочитаю другим, вы можете смягчить сетевые проблемы, выполнив db.fsyncLock () и db.fsyncUnlock () непосредственно из процедуры, которая будет выполняться на сервере, где mongo это работает.
Например, на сервере * NIX вы должны иметь возможность сделать правильный снимок, выполнив сценарий, подобный этому:
#!/bin/sh
mongo admin --eval "printjson(db.fsyncLock())"
# create file system snapshot
mongo admin --eval "printjson(db.fsyncUnlock())"
# make the backup of entire snapshot
# release the snapshot
Запустив этот скрипт непосредственно на сервере, где находится mongo, монго клиент подключится к серверу, используя TCP-соединение с 127.0.0.1, и ваши сетевые проблемы исчезнут.