[英]MongoDB won't start after server crash
我的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的不正常关闭。
有两件事可以做:
如果这是一台开发机器并且您没有使用过您的数据库(并且没有您的程序),则可以手动删除该文件。 对于在Ubuntu 12.10上运行的MongoDB 2.2.2,它位于/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
根据我的经验,我通常会删除数据库文件夹中的“mongod.lock”文件 - 在我的情况下:
*我浏览到我的ubuntu即“data”文件夹中安装数据库的位置。(cd data); 列出文件(ls)*然后,我将通过发出“rm mongod.lock”文件删除数据库崩溃时自动创建的“mongod.lock”文件。
之后我会发出“./mongod”来启动mongo deamon或者mongo来启动mongo shell。 一切都会好起来的。
如果你没有使用像Bluepill或Monit等监控工具,你将不得不面对这个问题,因为在服务器崩溃后由于某种原因mongo没有自动启动它的守护进程然后你必须让它手动工作,比如sudo service mongod restart
我认为这个问题,但它需要完成更多的任务,请在启动你的mongo守护进程之前确保你的dbpath在/etc/mongod.conf
。
对我来说是
storage:
dbPath: /var/lib/mongodb
当我输入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
命令在所需的dbpath启动mongo进程。
仅供参考:使用mongod
命令启动mongo进程
检查服务器上是否有足够的可用空间。 如果没有空间,mongodb将无法启动。
这可能不是最好的解决方案,但如果你绝望,你可以试试这个。 似乎只有期刊对我来说是一个问题,所以我采取了以下步骤:
完成这些步骤(花了不到5分钟)后,我启动并运行,所有数据似乎都没问题。
多谢你们。 我们还遇到了一个问题,即MongoDB一次又一次地重新启动它正在抱怨旧的锁文件 。 我从Windows服务列表中删除了MongoDB,然后删除了mongod.lock
文件。 之后我能够正确启动MongoDB服务并且运行正常。
从mongo数据目录dbpath
删除.lock
文件对我.lock
。
例如sudo sudo rm {data-directory}/mongod.lock
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.