Задний план:
У меня есть несколько машин-приложений AIO (запуск ubuntu с rails + mongodb + chromium) на одной машине на мобильном тренере для отображения информации, иногда пользователь может изменить chuck в некоторых данных на mongodb.
Теперь питание машины постоянное, водитель автобуса может выключить машину в любой момент. машина имеет 2 раздела, первый - aufs для /, другой - ext4 для каталога mongodb / data. НО в момент отключения электроэнергии в базу данных не поступают данные.
Проблема:
Каждый раз, когда машина перезагружается из-за отключения электроэнергии (каждые несколько часов), mongodb оставляет файл mongod.lock в своем каталоге. в /etc/rd.local я пытался удалить файл блокировки при каждой загрузке, но он иногда все равно отказываюсь заводиться. из-за чего мое приложение не запускается.
Согласно официальным документам: http://www.mongodb.org/display/DOCS/Durability+and+Repair , Я все еще не могу запустить.
Как лучше всего запускать mongodb в случае регулярного сбоя питания, как указано выше? Не закидывая доп.
В первую очередь пожалуйста ЧИТАТЬ благословенная документация вы связались с:
mongod.lock
Не удаляйте файл mongod.lock. Если mongod не запускается, воспользуйтесь одним из описанных выше методов, чтобы исправить ситуацию.Удаление файла блокировки позволит запустить базу данных, когда ее данные могут быть повреждены. В общем, никогда не следует принудительно запускать базу данных с возможно поврежденными данными. В экстренной ситуации вы можете удалить файл блокировки, чтобы вытащить с сервера все возможные данные. Если вы когда-либо вручную удаляли файл блокировки и запускали резервное копирование сервера, вам не следует считать этот сервер «исправным».
Следуйте процедурам, изложенным в благословенная документация, на которую вы ссылались для восстановления после сбоев питания.
MongoDB не предназначен для работы в среде, где ее бесцеремонно ударили по голове - если вам нужна такая надежность, вам нужна база данных, специально разработанная для двухфазной фиксации и сброса записи на диск.
Все mongod.lock
файл сообщает вам, что БД была отключена некорректно, т.е. не была остановлена администратором и т. д.
При запуске --repair
Сама по себе операция mongod попытается прочитать существующие файлы, записать новые файлы, а затем поменять их местами. После завершения он должен удалить файл mongod.lock и позволить вам запустить базу данных.
Если используется вместе с --repairpath
аргумент, то восстановленное поле будет помещено в указанный путь восстановления, и файл блокировки не может быть удален, так как исходные файлы данных не были восстановлены, а были записаны новые файлы с восстановленными данными и указанным путем.
Возможный поток работы с --repairpath
:
Запуск службы, сообщение журнала информирует вас о проблеме с блокировкой, завершается.
mongod --dbpath=/data/db
Вы запускаете команду восстановления, подобную этой:
mongod --dbpath=/data/db --repair --repairpath=/data/db2
и дождитесь его завершения.
После завершения запустите mongod с пути к восстановленным файлам:
mongod --dbpath=/data/db2
После подтверждения работы вы можете удалить /data/db
каталог, если хотите.
Все это, вероятно, можно устранить, "заменив" файлы в /data/db/
не используя параметр --repairpath.
Что касается восстановления, взгляните на Ведение журнала - это создает журнал операций, который сбрасывается на постоянный диск каждые 100 мсек, а когда mongod запускается, обнаруживает непримененные файлы журнала и применяет их, удаляет файл блокировки и запускает сервер.