77

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

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

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

4

8 回答 8

178

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

可以做两件事:

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

  2. 更安全的方法是遵循 MongoDB 的耐久性和修复指南。综上所述,对于具有上述配置的机器,您应该执行以下命令:

    sudo -u mongodb mongod --repair --dbpath /var/lib/mongodb/
    sudo service mongod start
    
于 2012-12-04T10:00:31.230 回答
3

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

然后:

须藤蒙戈

于 2015-10-29T14:07:22.450 回答
3

根据我的经验,我通常会删除数据库文件夹中的“mongod.lock”文件——在我的例子中:

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

之后,我将发出“./mongod”来启动 mongo 守护程序或 mongo 来启动 mongo shell。一切都会好起来的。

于 2016-06-01T10:35:04.280 回答
1

如果您没有使用BluepillMonit等监控工具,您将不得不面对这个问题,因为在服务器崩溃后由于某种原因 mongo 没有自动启动其守护进程,那么您必须手动使其工作,就像sudo service mongod restart 我认为这个问题一样,但它需要还有一些任务要完成,请/etc/mongod.conf在启动 mongo 守护程序之前确保您的 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 进程

于 2018-10-30T04:58:37.930 回答
0

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

于 2015-01-31T06:34:25.630 回答
0

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

  1. 创建一个新的数据目录。可能是 /var/lib/mongodb2
  2. 更新您的 mongod.conf以指向新的数据目录。
  3. 启动mongoDB。
  4. 如果启动成功,那么你可以再次关闭 mongo并继续,否则你可以在这里停止阅读。
  5. 找到您以前的数据目录并将数据库文件复制到新的数据目录(例如,admin.0 admin.1 admin.ns 等)
  6. 再次启动mongoDB(仍然使用新的数据目录)

完成这些步骤后(不到 5 分钟),我启动并运行,所有数据似乎都正常。

于 2017-12-02T23:07:34.620 回答
0

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

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

于 2018-12-18T10:15:50.493 回答
0

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

于 2018-10-03T05:47:10.433 回答