【问题标题】:MongoDB won't start after server crash服务器崩溃后 MongoDB 无法启动
【发布时间】:2012-11-21 22:08:59
【问题描述】:

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


    【解决方案1】:

    日志文件告诉你有一个“旧锁文件”。 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
      

    【讨论】:

    • 对于 Windows,请参阅 stackoverflow.com/questions/11877930/…
    • 亲爱的@HosamAly,我该如何解决它,因为服务器通常会崩溃。所以我必须在服务器崩溃后手动执行?这太糟糕了,因为其他数据库(mysql,postgresql,..)总是在服务器崩溃后成功启动
    • @JohnNguyen 您可以将其自动化,但我建议您不要这样做,因为您将没有机会查看“修复”过程可能造成的损坏。
    • 第一行不应该是: sudo mongod -u mongodb --repair --dbpath /var/lib/mongodb/ 吗? – joshy 7 分钟前
    • @joshy 我不知道你的版本是否可以工作。我的以“mongodb”用户权限运行mongod。你的以 root 权限运行它。
    【解决方案2】:

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

    【讨论】:

    • 这是一个很好的检查,即使在这种情况下它是不正确的。
    【解决方案3】:

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

    然后:

    sudo mongod

    【讨论】:

    • sudo mongod 表示您的数据库以root身份运行,从安全角度来看不建议这样做。
    【解决方案4】:

    根据我的经验,我通常会删除数据库文件夹中的“mongod.lock”文件 - 就我而言:

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

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

    【讨论】:

      【解决方案5】:

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

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

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

      【讨论】:

        【解决方案6】:

        谢谢各位。我们还遇到了一个问题,即 MongoDB 一遍又一遍地重新启动,它抱怨 old lock file。我从 Windows 服务列表中停止了 MongoDB,然后删除了 mongod.lock 文件。之后我能够正确启动 MongoDB 服务,并且运行良好。

        【讨论】:

          【解决方案7】:

          如果您没有使用 BluepillMonit 等监控工具,您将不得不面对这个问题,因为由于某种原因导致服务器崩溃后 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 进程

          【讨论】:

            【解决方案8】:

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

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

            【讨论】:

              猜你喜欢
              • 2015-07-07
              • 1970-01-01
              • 1970-01-01
              • 2021-07-08
              • 1970-01-01
              • 1970-01-01
              • 2022-10-18
              • 2023-01-18
              • 2013-04-16
              相关资源
              最近更新 更多