服务器崩溃后,MongoDB不会启动

我的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 

(输出重新格式化以匹配网站布局。)

发生了什么? 我该如何解决?

日志文件告诉你,你有一个“旧的locking文件” 。 MongoDB在运行时会保留一个locking文件。 它在启动时创build该文件,并在停止时删除它。 当电脑崩溃(或MongoDB崩溃,例如通过kill ),这个文件不会被删除,因此数据库不会启动。 这个文件的存在表明MongoDB不干净的closures。

有两件事可以做:

  1. 如果这是一台开发机器,并且您还没有使用数据库(并且没有您的程序),则可以手动删除该文件。 对于在Ubuntu 12.10上运行的MongoDB 2.2.2,它位于/var/lib/mongodb/mongod.lock 。 对于其他版本,该文件可能位于不同的path中,或者可能被命名为mongo.lock

  2. 更安全的路线是遵循MongoDB的耐久性和修复指南。 总之,对于具有上述configuration的机器,您应该执行以下命令:

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

我所要做的就是运行:sudo mongod –repair

然后:

sudo mongod

根据我的经验,我通常删除数据库文件夹内的“mongod.lock”文件 – 在我的情况下:

*我浏览到数据库安装在我的Ubuntu,即“数据”文件夹(CD数据); 列出文件(ls)*然后,我将删除在数据库崩溃时自动创build的“mongod.lock”文件,方法是发出“rm mongod.lock”文件。

之后我会发出“./mongod”启动mongo deamon或者mongo启动mongo shell。 一切都会好的。

检查您的服务器上是否有足够的可用空间。 如果没有剩余空间,mongodb将无法启动。