MongoDB внезапно перестал работать сегодня (12.04)

После того, как я обновился до 12.04 месяц или два назад, я установил MongoDB через APT. С тех пор это работало хорошо. Я не вносил изменений в конфиг или что-то еще - он работал из коробки.

Сегодня это не началось, когда я вошел в систему, у меня внезапно произошла ошибка "не удалось подключиться к любому серверу в списке" в моем приложении, и я проверил и mongod не работает

ls -al /var/lib/mongodb

Показывает нет *.lock файлы.

$ /etc/init.d/mongodb start
Rather than invoking init scripts through /etc/init.d, use the service(8)
utility, e.g. service mongodb start

Since the script you are attempting to invoke has been converted to an
Upstart job, you may also use the start(8) utility, e.g. start mongodb
start: Rejected send message, 1 matched rules; type="method_call", sender=":1.89" (uid=1000 pid=4284 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")

Потом я попробовал sudo mongod --repair

Mon Aug 13 12:16:48 [initandlisten] MongoDB starting : pid=4350 port=27017 dbpath=/data/db/ 64-bit host=computer-localhost
Mon Aug 13 12:16:48 [initandlisten] db version v2.0.4, pdfile version 4.5
Mon Aug 13 12:16:48 [initandlisten] git version: nogitversion
Mon Aug 13 12:16:48 [initandlisten] build info: Linux yellow 2.6.24-29-server #1 SMP Tue Oct 11 15:57:27 UTC 2011 x86_64 BOOST_LIB_VERSION=1_46_1
Mon Aug 13 12:16:48 [initandlisten] options: { repair: true }
Mon Aug 13 12:16:48 [initandlisten] exception in initAndListen: 10296 dbpath (/data/db/) does not exist, terminating
Mon Aug 13 12:16:48 dbexit: 
Mon Aug 13 12:16:48 [initandlisten] shutdown: going to close listening sockets...
Mon Aug 13 12:16:48 [initandlisten] shutdown: going to flush diaglog...
Mon Aug 13 12:16:48 [initandlisten] shutdown: going to close sockets...
Mon Aug 13 12:16:48 [initandlisten] shutdown: waiting for fs preallocator...
Mon Aug 13 12:16:48 [initandlisten] shutdown: lock for final commit...
Mon Aug 13 12:16:48 [initandlisten] shutdown: final commit...
Mon Aug 13 12:16:48 [initandlisten] shutdown: closing all files...
Mon Aug 13 12:16:48 [initandlisten] closeAllFiles() finished
Mon Aug 13 12:16:48 dbexit: really exiting now

Есть идеи, что не так?

Обновить

Так я попробовал sudo service mongodb start и это наконец началось (я пробовал это несколько раз раньше)

mongodb start/running, process 4376

4 ответа

Решение

диагностика

Первое, что нужно сделать, это проверить файлы журнала MongoDB, чтобы увидеть, почему служба не запустилась. Бежать:

tail -f /var/log/mongodb/mongodb.log

в одном окне терминала и затем запустите:

sudo service mongodb restart

в другой. В файле журнала должна отображаться попытка запуска MongoDB и сообщение об ошибке в случае сбоя.

Ремонт

Если в журналах указано, что вам нужно восстановить базу данных, следует помнить о двух моментах:

  1. По умолчанию, mongod ожидает, что файлы базы данных будут в /data/db/, но пакеты Ubuntu настраивают его на /var/lib/mongodb/, Так что если вы бежите mongod напрямую, а не с помощью сценариев upstart, вы должны указать, где находятся файлы базы данных, добавив --dbpath аргумент.
  2. При беге mongod используя upstart, он будет работать как mongodb пользователь, который является пользователем, который владеет файлами базы данных. Если вы бежите mongod с помощью sudo без указания пользователя, в результате вы получите файлы базы данных, принадлежащие root, Так что вам нужно добавить -u аргумент sudo,

Если ваши файлы базы данных в настоящее время принадлежат root вам нужно будет поменять их право собственности на mongodb прежде чем MongoDB сможет использовать их снова:

sudo chown -R mongodb:mongodb /var/lib/mongodb/

TL; DR

Чтобы запустить восстановление на MongoDB при использовании упакованного дистрибутива, вам нужно выполнить:

sudo -u mongodb mongod --repair --dbpath /var/lib/mongodb/

У меня тоже была такая же проблема, и я ее решил. Когда я пытался начать mongodb с sudo показало, что процесс уже запущен (mongodb start/running, process xxxx). Но я не могу получить доступ к запущенному экземпляру через оболочку. Он показал, что соединение не удалось.

Решение

Поэтому я удалил файл блокировки:

sudo rm /var/lib/mongodb/mongod.lock

Затем я перезапустил сервис:

sudo service mongodb start

Тогда Монго снова поработал на моей машине!

Была похожая проблема, причина была немного глупой; Мне не хватило места на диске.

Проверяя логи в /var/log/mongodb/mongod.log, я заметил следующую строку:

2015-04-13T10:56:37.132+0200 [initandlisten] ERROR: Insufficient free space for journal files

Надеясь, что это спасет кого-то полчаса их жизни.

У меня также была похожая проблема запуска mongod.exe на моей машине (установка Windows). Был .lock файл в C:\data\db который был причиной проблемы. Я удалил этот файл, и проблема была решена.

Другие вопросы по тегам