【问题标题】:mongodb crashes after unexpected shutdown意外关闭后mongodb崩溃
【发布时间】:2012-10-11 11:28:08
【问题描述】:

在我们的 vps 关闭并启动它后,mongod 服务没有自动启动,我们无法通过service mongod start 启动它, 文件/var/log/mongo/mongod.log 包含以下日志:

  ***** SERVER RESTARTED *****


Thu Oct 11 13:51:18 
Thu Oct 11 13:51:18 warning: 32-bit servers don't have journaling enabled by default. Please use --journal if you want durability.
Thu Oct 11 13:51:18 
Thu Oct 11 13:51:18 [initandlisten] MongoDB starting : pid=3821 port=27017 dbpath=/var/lib/mongo 32-bit host=server2.paransa.org
Thu Oct 11 13:51:18 [initandlisten] 
Thu Oct 11 13:51:18 [initandlisten] ** NOTE: when using MongoDB 32 bit, you are limited to about 2 gigabytes of data
Thu Oct 11 13:51:18 [initandlisten] **       see http://blog.mongodb.org/post/137788967/32-bit-limitations
Thu Oct 11 13:51:18 [initandlisten] **       with --journal, the limit is lower
Thu Oct 11 13:51:18 [initandlisten] 
Thu Oct 11 13:51:18 [initandlisten] ** WARNING: You are running in OpenVZ. This is known to be broken!!!
Thu Oct 11 13:51:18 [initandlisten] 
Thu Oct 11 13:51:18 [initandlisten] db version v2.2.0, pdfile version 4.5
Thu Oct 11 13:51:18 [initandlisten] git version: f5e83eae9cfbec7fb7a071321928f00d1b0c5207
Thu Oct 11 13:51:18 [initandlisten] build info: Linux domU-12-31-39-01-70-B4 2.6.21.7-2.fc8xen #1 SMP Fri Feb 15 12:39:36 EST 2008 i686 BOOST_LIB_VERSION=1_49
Thu Oct 11 13:51:18 [initandlisten] options: { config: "/etc/mongod.conf", dbpath: "/var/lib/mongo", fork: "true", logappend: "true", logpath: "/var/log/mongo/mongod.log", pidfilepath: "/var/run/mongodb/mongod.pid" }
Thu Oct 11 13:51:18 [initandlisten] couldn't open /var/lib/mongo/mydb_main.ns errno:13 Permission denied
Thu Oct 11 13:51:18 [initandlisten] error couldn't open file /var/lib/mongo/mydb_main.ns terminating
Thu Oct 11 13:51:18 dbexit: 
Thu Oct 11 13:51:18 [initandlisten] shutdown: going to close listening sockets...
Thu Oct 11 13:51:18 [initandlisten] shutdown: going to flush diaglog...
Thu Oct 11 13:51:18 [initandlisten] shutdown: going to close sockets...
Thu Oct 11 13:51:18 [initandlisten] shutdown: waiting for fs preallocator...
Thu Oct 11 13:51:18 [initandlisten] shutdown: closing all files...
Thu Oct 11 13:51:18 [initandlisten] closeAllFiles() finished
Thu Oct 11 13:51:18 [initandlisten] shutdown: removing fs lock...
Thu Oct 11 13:51:18 dbexit: really exiting now

如您所见,日志显示 mongo 服务器无法打开 *.ns 文件导致权限湖

但如果我通过以下命令手动运行服务器:

mongod --dbpath=/var/lib/mongo -f /etc/mongod.conf

似乎一切都很好,关于日志文件:

***** SERVER RESTARTED *****


Thu Oct 11 14:02:06 
Thu Oct 11 14:02:06 warning: 32-bit servers don't have journaling enabled by default. Please use --journal if you want durability.
Thu Oct 11 14:02:06 
Thu Oct 11 14:02:06 [initandlisten] MongoDB starting : pid=4090 port=27017 dbpath=/var/lib/mongo 32-bit host=server2.paransa.org
Thu Oct 11 14:02:06 [initandlisten] 
Thu Oct 11 14:02:06 [initandlisten] ** NOTE: when using MongoDB 32 bit, you are limited to about 2 gigabytes of data
Thu Oct 11 14:02:06 [initandlisten] **       see http://blog.mongodb.org/post/137788967/32-bit-limitations
Thu Oct 11 14:02:06 [initandlisten] **       with --journal, the limit is lower
Thu Oct 11 14:02:06 [initandlisten] 
Thu Oct 11 14:02:06 [initandlisten] ** WARNING: You are running in OpenVZ. This is known to be broken!!!
Thu Oct 11 14:02:06 [initandlisten] 
Thu Oct 11 14:02:06 [initandlisten] db version v2.2.0, pdfile version 4.5
Thu Oct 11 14:02:06 [initandlisten] git version: f5e83eae9cfbec7fb7a071321928f00d1b0c5207
Thu Oct 11 14:02:06 [initandlisten] build info: Linux domU-12-31-39-01-70-B4 2.6.21.7-2.fc8xen #1 SMP Fri Feb 15 12:39:36 EST 2008 i686 BOOST_LIB_VERSION=1_49
Thu Oct 11 14:02:06 [initandlisten] options: { config: "/etc/mongod.conf", dbpath: "/var/lib/mongo", fork: "true", logappend: "true", logpath: "/var/log/mongo/mongod.log", pidfilepath: "/var/run/mongodb/mongod.pid" }
Thu Oct 11 14:02:07 [websvr] admin web console waiting for connections on port 28017
Thu Oct 11 14:02:07 [initandlisten] waiting for connections on port 27017

并使用 --repair arg 没有帮助 (也许是因为它可以手动启动 mongod --dbpath=/var/lib/mongo -f /etc/mongod.conf 并将 --repair arg 添加到命令中,记录一切都很好!...)

有什么建议吗?

【问题讨论】:

  • 可能尝试检查此链接stackoverflow.com/questions/5798549/…
  • 运行 mongod 的用户和拥有 .ns 的用户是否相同?
  • 更改权限不起作用,当我尝试开始使用“service mongod start”和“sudo !!”日志说我没有权限,但我可以通过上面给出的命令手动启动它。我使用 root 用户启动 mongod

标签: mongodb


【解决方案1】:

这是一个权限问题,当您通过服务启动时,您正在以 mongod(或 mongodb 等)用户身份运行,而当您使用 sudo 或调用时,您可能以 root 身份运行(您在上面的 cmets 中确认了这一点)作为根。您需要修复该文件夹中所有文件的权限,并且永远不要以 root 身份启动服务。

要根据您发布的内容修复文件,假设您的相关用户是 mongodb 并且组是 mongodb,您可以使用 sudo(或作为 root)执行以下操作 - 替换您系统的相应用户:

chown -R mongodb:mongodb /var/lib/mongo
chown -R mongodb:mongodb /var/run/mongodb
chown mongodb:mongodb /var/log/mongo/mongod.log

修复这些文件夹的权限后,您应该能够再次通过服务启动。注意:如果您发布 ls -al /var/lib/mongo 的输出,那么我可以为您提供运行所需的确切命令

【讨论】:

  • 哦,真的谢谢,对我来说很好,但使用“mongod”而不是“mongodb”作为用户
  • 也为我工作,我使用 scp 将数据库复制到我的服务器,我想我可能会搞砸权限。因为我只需要第一个命令
【解决方案2】:
sudo rm /data/db/mongod.lock
sudo mongod --dbpath /data/db --repair
sudo mongod --dbpath /data/db

【讨论】:

  • 我是这样运行的;但是有两个问题:首先,无法正确关闭它,您必须执行 ctrl-C 然后手动删除锁定文件,其次,它无法使用 sudo service mongodb start 启动。它可能与 mongodb.conf 文件有关,但我尝试禁用日志,这似乎是默认设置的唯一选项,但它不起作用。事实上,它甚至更奇怪,它可以与“-f /etc/mongodb.conf”一起使用,但不能与 service 命令一起使用。可能与 upstart 脚本有关,但不知道是什么。
  • 我只做了一次然后我可以从“sudo mongod”开始,不需要手动删除锁。仅供参考:我在 /etc/mongodb.conf 中启用了以下内容:dbpath=/var/lib/mongodb logpath=/var/log/mongodb/mongodb.log logappend=true
【解决方案3】:

在 CMD 中启动 mongod.exe 之前,尝试删除 "\data\db" 文件夹中的 *.lock 文件。

【讨论】:

    【解决方案4】:
    Stop the MongoDB service
    

    sudo 服务 mongodb 停止 删除 MongoDB 锁定文件

    sudo rm /var/lib/mongodb/mongod.lock
    
    Change ownership from root to the MongoDB path
    
    sudo chown -R mongodb:mongodb /var/lib/mongodb/
    
    Access the mongodb Shell   
    
     sudo mongod --dbpath=/var/lib/mongodb
    
    Start the MongoDB service
    
    sudo service mongodb start
    Test the mongo application
    
    mongo
    

    【讨论】:

      【解决方案5】:

      您可以使用以下命令从rc.local 自动运行您的 mongodb:

      su pi -c 'sudo mongod --repairpath your_path'
      

      不用担心意外关机。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-11-05
        • 1970-01-01
        相关资源
        最近更新 更多