我的Ubuntu电脑崩溃了,当我重新启动它时,MongoDB无法工作.我try 了以下命令,得到了以下输出:

$ 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

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

怎么搞的?我该怎么修?

推荐答案

日志(log)文件告诉你你有一个"old lock file".MongoDB在运行时保留一个lock文件.它在启动时创建该文件,在停止时删除该文件.当计算机崩溃时(或MongoDB崩溃,例如通过kill),该文件不会被删除,因此数据库不会启动.此文件的存在表明MongoDB已不干净地关闭.

可以做两件事:

  1. 如果这是一台开发机器,而您没有使用数据库(也没有使用程序),则可以手动删除该文件.对于运行在Ubuntu12.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
    

Mongodb相关问答推荐

mongoDB中数组中的聚合和元素

通过insertId MongoDB获取文档

以聚合顺序使用 $$ROOT

为什么一个 mongodb 副本集需要奇数个投票 node ?

Ruby on Rails 的 Cassandra、mongodb 或 couchdb

为什么使用整数作为 pymongo 的键不起作用?

MongoDB C# 驱动程序 - 如何将 _id 存储为 ObjectId 但映射到字符串 Id 属性?

Mongodb将重音字符匹配为基础字符

mongoose递归填充

mongo php副本连接非常慢

MongoDB聚合排序不起作用

为什么使用 Redis 而不是 MongoDb 进行缓存?

MongoError:Topology is closed, please connect despite established database connection

Spring Data MongoDB 中的独特之处

使用 MongoDB 的 map/reduce 来分组两个字段

MongoDB MapReduce - 发出一个键/一个值不调用reduce

Mongoose:查询starts with

RoboMongo:不显示所有文档

处理Mongodb连接的正确方法是什么?

mongo中的稀疏索引和空值