Мой компьютер 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
(Результат переформатирован для соответствия макету веб-сайта.)
Что случилось? Как я могу это исправить?
Файл журнала сообщает вам, что у вас есть "старый файл блокировки". MongoDB сохраняет файл блокировки во время работы. Он создает этот файл при запуске и удаляет его при остановке. Когда происходит сбой компьютера (или MongoDB, например, через kill
), этот файл не удаляется и, следовательно, база данных не запускается. Наличие этого файла указывает на нечистое завершение работы MongoDB.
Можно сделать две вещи:
Если это компьютер для разработки, и вы еще не использовали свою базу данных (и ни одной из ваших программ), вы можете удалить файл вручную. Для MongoDB 2.2.2, работающей на Ubuntu 12.10, он находится в /var/lib/mongodb/mongod.lock
. Для других версий файл может находиться по другому пути или иметь имя mongo.lock
.
Более безопасный маршрут - следовать руководству по долговечности и ремонту MongoDB. Таким образом, для машины с вышеуказанной конфигурацией вы должны выполнить следующие команды:
sudo -u mongodb mongod --repair --dbpath /var/lib/mongodb/
sudo service mongod start
все, что мне нужно было сделать, было запущено: sudo mongod --repair
то
sudo mongod
sudo mongod
означает, что ваша база данных работает от имени пользователя root, что не рекомендуется с точки зрения безопасности.
Основываясь на моем опыте, я обычно удаляю файл "mongod.lock", который находится внутри папки базы данных. В моем случае:
* Я просматриваю, где база данных установлена в моей папке "данные" ubuntu i.e(cd data); перечислить файлы (ls) * Затем я удалю файл "mongod.lock", который был автоматически создан при сбое базы данных, выпуская файл "rm mongod.lock".
После чего я либо выпущу "./mongod", чтобы запустить mongo deamon или mongo, чтобы запустить оболочку mongo. И все будет хорошо.
Удаление файла .lock
из каталога данных dbpath
работает для меня.
например, sudo sudo rm {data-directory}/mongod.lock
Если вы не использовали инструменты мониторинга, такие как 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
Спасибо, ребята. Мы также столкнулись с проблемой, когда MongoDB перезагружался снова и снова и жаловался на старый файл блокировки. Я остановил MongoDB из списка служб Windows, а затем удалил файл mongod.lock
. После этого я смог правильно запустить сервис MongoDB, и он работал нормально.
Это, вероятно, не лучшее решение, но если вы в отчаянии, вы можете попробовать это. Казалось, что только журнал для меня был проблемой, поэтому я сделал следующие шаги:
После выполнения этих шагов (заняло менее 5 минут), я работал и все данные выглядели нормально.
Проверьте, достаточно ли свободного места на вашем сервере. Если не осталось места, mongodb не запустится.