MongoDB не запускается после сбоя сервера

72

Мой компьютер Ubuntu разбился, и когда я перезапустил его, MongoDB не работал. Я попробовал следующие команды и получил следующий вывод:

$ mongo
Error: couldn't connect to server 127.0.0.1:27017 src/mongo/shell/mongo.js:91
exception: connect failed

$ service mongodb status
mongodb stop/waiting

$ service mongodb restart
stop: Unknown instance: 
start: Rejected send message, 1 matched rules; type="method_call",
       sender=":1.57" (uid=1000 pid=2227 comm="start mongodb ")
       interface="com.ubuntu.Upstart0_6.Job" member="Start" error name="(unset)"
       requested_reply="0"
       destination="com.ubuntu.Upstart" (uid=0 pid=1 comm="/sbin/init")

$ tail /var/log/mongodb/mongodb.log
[initandlisten] exception in initAndListen: 12596 old lock file, terminating
dbexit: 
[initandlisten] shutdown: going to close listening sockets...
[initandlisten] shutdown: going to flush diaglog...
[initandlisten] shutdown: going to close sockets...
[initandlisten] shutdown: waiting for fs preallocator...
[initandlisten] shutdown: closing all files...
[initandlisten] closeAllFiles() finished
dbexit: really exiting now

(Результат переформатирован для соответствия макету веб-сайта.)

Что случилось? Как я могу это исправить?

Теги:
administration

8 ответов

168
Лучший ответ

Файл журнала сообщает вам, что у вас есть "старый файл блокировки". MongoDB сохраняет файл блокировки во время работы. Он создает этот файл при запуске и удаляет его при остановке. Когда происходит сбой компьютера (или MongoDB, например, через kill), этот файл не удаляется и, следовательно, база данных не запускается. Наличие этого файла указывает на нечистое завершение работы MongoDB.

Можно сделать две вещи:

  1. Если это компьютер для разработки, и вы еще не использовали свою базу данных (и ни одной из ваших программ), вы можете удалить файл вручную. Для MongoDB 2.2.2, работающей на Ubuntu 12.10, он находится в /var/lib/mongodb/mongod.lock. Для других версий файл может находиться по другому пути или иметь имя mongo.lock.

  2. Более безопасный маршрут - следовать руководству по долговечности и ремонту MongoDB. Таким образом, для машины с вышеуказанной конфигурацией вы должны выполнить следующие команды:

    sudo -u mongodb mongod --repair --dbpath /var/lib/mongodb/
    sudo service mongod start
    
  • 2
    Для Windows см. Stackoverflow.com/questions/11877930/…
  • 1
    Уважаемый @HosamAly, Как я могу решить это, потому что сервер обычно падает. так что я должен делать вручную после сбоя сервера? это так плохо, потому что другие базы данных (mysql, postgresql, ..) всегда запускаются успешно после сбоя сервера
Показать ещё 6 комментариев
3

все, что мне нужно было сделать, было запущено: sudo mongod --repair

то

sudo mongod

  • 2
    sudo mongod означает, что ваша база данных работает от имени пользователя root, что не рекомендуется с точки зрения безопасности.
2

Основываясь на моем опыте, я обычно удаляю файл "mongod.lock", который находится внутри папки базы данных. В моем случае:

* Я просматриваю, где база данных установлена ​​в моей папке "данные" ubuntu i.e(cd data); перечислить файлы (ls) * Затем я удалю файл "mongod.lock", который был автоматически создан при сбое базы данных, выпуская файл "rm mongod.lock".

После чего я либо выпущу "./mongod", чтобы запустить mongo deamon или mongo, чтобы запустить оболочку mongo. И все будет хорошо.

0

Удаление файла .lock из каталога данных dbpath работает для меня.

например, sudo sudo rm {data-directory}/mongod.lock

0

Если вы не использовали инструменты мониторинга, такие как Bluepill, Monit и т.д., Вам придется столкнуться с этой проблемой, потому что после сбоя сервера по какой-то причине mongo не запустил свой демон автоматически, тогда вы должны заставить его работать вручную, например, sudo service mongod restart проблема, но для этого нужно выполнить еще несколько задач, пожалуйста, убедитесь, что ваш dbpath находится в /etc/mongod.conf прежде чем запускать ваш демон mongo.

Для меня это было

storage:
  dbPath: /var/lib/mongodb

Когда я mongod команду mongod она показывает мне MongoDB starting: pid=10795 port=27017 dbpath=/data/db 64-bit host=xyz.com убедитесь, что ваш dbpath такой же, как указано в /etc/mongod.conf

Для этого вы можете набрать sudo mongod --dbpath/var/lib/mongodb а затем использовать команду mongod чтобы запустить процесс mongo с нужной вам dbpath.

К вашему сведению: начните процесс mongod командой mongod

0

Спасибо, ребята. Мы также столкнулись с проблемой, когда MongoDB перезагружался снова и снова и жаловался на старый файл блокировки. Я остановил MongoDB из списка служб Windows, а затем удалил файл mongod.lock. После этого я смог правильно запустить сервис MongoDB, и он работал нормально.

0

Это, вероятно, не лучшее решение, но если вы в отчаянии, вы можете попробовать это. Казалось, что только журнал для меня был проблемой, поэтому я сделал следующие шаги:

  • Создать новый каталог данных. Возможно /var/lib/mongodb 2
  • Обновите файл mongod.conf, чтобы указать на новый каталог данных.
  • Запустить mongoDB.
  • Если он запускается успешно, вы можете выключить mongo снова и продолжить, иначе вы можете прекратить чтение здесь.
  • Найдите предыдущие данные dir и скопируйте файлы для своей базы данных в новый каталог данных (например, admin.0 admin.1 admin.ns и т.д.)
  • Запустите mongoDB снова (все еще используя новый каталог данных)

После выполнения этих шагов (заняло менее 5 минут), я работал и все данные выглядели нормально.

0

Проверьте, достаточно ли свободного места на вашем сервере. Если не осталось места, mongodb не запустится.

  • 1
    Это что-то хорошее, чтобы проверить, даже если это неправильно в этом случае.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню