После обновления до 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
Первое, что нужно сделать, - это проверить файлы журнала MongoDB, чтобы выяснить, почему служба не запустилась. Запустите:
tail -f /var/log/mongodb/mongodb.log
в одном окне терминала и затем выполните:
sudo service mongodb restart
в другом. В файле журнала должна отображаться попытка запуска MongoDB и сообщение об ошибке в случае сбоя.
Если в журналах указано, что вам нужно восстановить базу данных, следует помнить о двух моментах:
mongod
ожидает файлы базы данных. находиться в /data/db/
, но пакеты Ubuntu настраивают его для просмотра в /var/lib/mongodb/
. Поэтому, если вы запускаете mongod
напрямую, а не с помощью сценариев выскочки, вам нужно сообщить ему, где находятся файлы вашей базы данных, добавив аргумент --dbpath
. mongod
с использованием upstart он будет работать как пользователь mongodb
, который является пользователем, которому принадлежат файлы базы данных. Если вы запустите mongod
, используя sudo
без указания пользователя, вы получите файлы базы данных, принадлежащие root
. Поэтому вам нужно добавить аргумент -u
в sudo
. Если ваши файлы базы данных в настоящее время принадлежат root
, вам необходимо изменить их владельца обратно на mongodb
, прежде чем MongoDB сможет использовать их снова:
sudo chown -R mongodb:mongodb /var/lib/mongodb/
Чтобы запустить восстановление в MongoDB при использовании упакованного дистрибутива, необходимо выполнить:
sudo -u mongodb mongod --repair --dbpath /var/lib/mongodb/
У меня также была похожая проблема с запуском mongod.exe на моей машине (установка Windows). Это был файл .lock
в C:\data\db
, который вызывал проблему. Я удалил этот файл, и проблема была решена.
У меня тоже была такая же проблема, и я ее решил. Когда я попытался запустить 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
Надеясь, что это спасет кого-то полчаса их жизни.