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 и сообщение об ошибке в случае сбоя.
Ремонт
Если в журналах указано, что вам нужно восстановить базу данных, следует помнить о двух моментах:
- По умолчанию,
mongodожидает, что файлы базы данных будут в/data/db/, но пакеты Ubuntu настраивают его на/var/lib/mongodb/, Так что если вы бежитеmongodнапрямую, а не с помощью сценариев upstart, вы должны указать, где находятся файлы базы данных, добавив--dbpathаргумент. - При беге
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 который был причиной проблемы. Я удалил этот файл, и проблема была решена.