服务器崩溃后MongoDB无法启动

时间:2012-12-04 10:00:31

标签: mongodb ubuntu administration

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

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

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

8 个答案:

答案 0 :(得分:169)

日志文件告诉您有一个“旧锁定文件”。 MongoDB在运行时保留lock个文件。它在启动时创建此文件,并在文件停止时删除它。当计算机崩溃(或MongoDB崩溃,例如通过kill)时,该文件不会被删除,因此数据库无法启动。此文件的存在表明MongoDB不正常关闭。

可以做两件事:

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

  2. 更安全的路线是遵循MongoDB的Durability and Repair指南。总之,对于具有上述配置的计算机,您应该执行以下命令:

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

答案 1 :(得分:3)

所有我必须做的就是跑: sudo mongod --repair

然后:

sudo mongod

答案 2 :(得分:2)

根据我的经验,我通常会删除" mongod.lock"数据库文件夹中的文件 - 在我的情况下:

*我浏览到我的ubuntu上安装数据库的位置,即"数据"文件夹。(cd数据);列出文件(ls) *然后,我将删除" mongod.lock"数据库崩溃时自动创建的文件,发出" rm mongod.lock"文件。

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

答案 3 :(得分:0)

检查服务器上是否有足够的可用空间。如果没有空间,mongodb不会开始。

答案 4 :(得分:0)

这可能不是最好的解决方案,但如果你绝望,你可以试试这个。似乎只有期刊对我来说是一个问题,所以我采取了以下措施:

  1. 创建新数据目录。可能是/ var / lib / mongodb2
  2. 更新您的mongod.conf 以指向新数据目录。
  3. 启动 mongoDB。
  4. 如果成功启动,则可以再次关闭mongo 并继续,否则您可以在此处停止阅读。
  5. 找到以前的数据目录并将数据库文件复制到新数据目录(例如,admin.0 admin.1 admin.ns等)
  6. 再次启动mongoDB (仍使用新数据目录)
  7. 完成这些步骤(花了不到5分钟)后,我就开始运行,所有数据都显示正常。

答案 5 :(得分:0)

谢谢你们。我们还遇到一个问题,即MongoDB一遍又一遍地重启,它抱怨旧锁文件。我从Windows服务列表中停止了MongoDB,然后删除了mongod.lock文件。之后,我能够正确启动MongoDB服务,并且工作正常。

答案 6 :(得分:0)

如果您未使用 Bluepill Monit 等监控工具,则您将不得不面对此问题,因为由于某种原因服务器崩溃后,mongo不会自动启动其守护进程那么您必须手动使其工作,例如sudo service mongod restart 我发现了这个问题,但还需要完成更多任务,请在启动mongo守护程序之前确保/etc/mongod.conf的dbpath。

对我来说是

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进程

答案 7 :(得分:0)

从mongo数据目录.lock中删除dbpath文件对我有用。

例如sudo sudo rm {data-directory}/mongod.lock