2012-03-31 2 views
30

Я не могу подключиться к Mongo DB, который я установил в качестве службы Windows на своей локальной машине. Я также создал небольшое приложение WPF, которое общается с MongoDB. ErrorMessage:Как отремонтировать мой монгод?

Ошибка: не удалось подключиться к серверу 127.0.0.1 оболочки/mongo.js: 8 исключение: Не удалось соединиться с некорректного выключения обнаружен.

+1

Я сделал ту же архитектуру приложения: WPF приложение и MongoDB в качестве «местного дб» и я делаю вывод, что из-за этой проблемы MongoDb не подходит для такого применения, но только для очень надежных серверных платформ. Иначе вас часто посещает эта проблема. Лучше пойти на альтернативу, например, LiteDb или Mini-Biggy. –

ответ

89

Вы должны запустить его с помощью флага --repair.

mongod --repair 

После завершения ремонта остановите это и запустите его нормально. Documentation on --repair option.

+1

Я понял, прочитав руководство. – marko

+37

Чтение хорошее :) –

+1

Если сбой ремонта и mongod отвечает за исключение в поврежденном файле данных, удалите файл mongd.lock вместе с поврежденными файлами данных манго и снова запустите mongod -repair. Очевидно, вы потеряете данные с этим подходом, но по крайней мере вы сможете снова запустить mongod. – chromaloop

11

Quicker:

sudo rm /data/db/mongod.lock 
sudo mongod --dbpath /data/db --repair 
sudo mongod --dbpath /data/db 
+0

помогло, спасибо! – Saani

+1

Спасибо! Использование опции -dbpath с флагом -repair работало для меня. У меня была такая же проблема с «нечистым завершением» (что бы это ни значило), и когда я попытался восстановить, я получил сообщение об ошибке, что каталог по умолчанию «\ data \ db» не найден. Это ожидалось, поскольку я использую отдельное место для хранения моих журналов и данных. Я просто установил -dbpath в свое пользовательское местоположение и работал. Я не подтвердил, но я предполагаю, что я могу использовать -config «mongodb \ mongod.cfg» с флагом --repair для MongoDB, чтобы использовать мои пользовательские настройки. Странно, что он не читал из этого файла с ремонтом. –

+0

это работает .. Спасибо +1 –

9

Если вы делаете операцию ремонта, как корневой пользователь будет уверен, что после этого все файлы БД принадлежат пользователю MongoDB, в противном случае MongoDB не заводится

chown -R mongodb:mongodb /data/db 
rm /data/db/mongod.lock 
/etc/init.d/mongodb start 
2
$ mongo 
> use dbname 
> db.repairDatabase() 

Примечание - функция восстановления также доступна в оболочке с помощью db.repairDatabase() для команды repairDatabase.

Смотрите также http://docs.mongodb.org/manual/tutorial/recover-data-following-unexpected-shutdown/:

+0

Первые строки, предназначенные для сценария? Затем добавьте их с 4 пробелами для форматирования как кода, а не как список. – Artemix

Смежные вопросы