![MongoDB 今天突然停止工作(12.04)](https://linux22.com/image/822584/MongoDB%20%E4%BB%8A%E5%A4%A9%E7%AA%81%E7%84%B6%E5%81%9C%E6%AD%A2%E5%B7%A5%E4%BD%9C%EF%BC%8812.04%EF%BC%89.png)
一两个月前我更新到 12.04 后,通过 APT 安装了 MongoDB。从那时起,它一直运行良好。我没有对配置或任何东西进行任何更改 - 它开箱即用。
今天它没有启动,当我登录时,我的应用程序突然出现“无法连接到列表中的任何服务器”的错误,我检查了一下,它并mongod
没有运行。
ls -al /var/lib/mongodb
没有显示*.lock
文件。
$ /etc/init.d/mongodb start
Rather than invoking init scripts through /etc/init.d, use the service(8)
utility, e.g. service mongodb start
Since the script you are attempting to invoke has been converted to an
Upstart job, you may also use the start(8) utility, e.g. start mongodb
start: Rejected send message, 1 matched rules; type="method_call", sender=":1.89" (uid=1000 pid=4284 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")
然后我尝试sudo mongod --repair
Mon Aug 13 12:16:48 [initandlisten] MongoDB starting : pid=4350 port=27017 dbpath=/data/db/ 64-bit host=computer-localhost
Mon Aug 13 12:16:48 [initandlisten] db version v2.0.4, pdfile version 4.5
Mon Aug 13 12:16:48 [initandlisten] git version: nogitversion
Mon Aug 13 12:16:48 [initandlisten] build info: Linux yellow 2.6.24-29-server #1 SMP Tue Oct 11 15:57:27 UTC 2011 x86_64 BOOST_LIB_VERSION=1_46_1
Mon Aug 13 12:16:48 [initandlisten] options: { repair: true }
Mon Aug 13 12:16:48 [initandlisten] exception in initAndListen: 10296 dbpath (/data/db/) does not exist, terminating
Mon Aug 13 12:16:48 dbexit:
Mon Aug 13 12:16:48 [initandlisten] shutdown: going to close listening sockets...
Mon Aug 13 12:16:48 [initandlisten] shutdown: going to flush diaglog...
Mon Aug 13 12:16:48 [initandlisten] shutdown: going to close sockets...
Mon Aug 13 12:16:48 [initandlisten] shutdown: waiting for fs preallocator...
Mon Aug 13 12:16:48 [initandlisten] shutdown: lock for final commit...
Mon Aug 13 12:16:48 [initandlisten] shutdown: final commit...
Mon Aug 13 12:16:48 [initandlisten] shutdown: closing all files...
Mon Aug 13 12:16:48 [initandlisten] closeAllFiles() finished
Mon Aug 13 12:16:48 dbexit: really exiting now
知道哪里出了问题吗?
更新
所以我尝试了一下sudo service mongodb start
,它终于启动了(我之前尝试过几次)
mongodb start/running, process 4376
答案1
诊断
首先要做的是检查 MongoDB 日志文件,查看服务无法启动的原因。运行:
tail -f /var/log/mongodb/mongodb.log
在一个终端窗口中,然后运行:
sudo service mongodb restart
在另一个中。日志文件应显示 MongoDB 尝试启动,如果失败则报告错误消息。
维修
如果日志表明您需要修复数据库,请记住两点:
- 默认情况下,
mongod
数据库文件位于 中/data/db/
,但 Ubuntu 软件包将其配置为在 中查找/var/lib/mongodb/
。因此,如果您mongod
直接运行而不是使用 upstart 脚本,则需要通过添加参数来告诉它数据库文件的位置--dbpath
。 - 使用 upstart运行时
mongod
,它将以拥有数据库文件的用户身份运行。如果您在不指定用户的情况下运行使用,那么您最终将得到拥有数据库文件的mongodb
用户。因此您需要向添加一个参数。mongod
sudo
root
-u
sudo
如果您的数据库文件当前归root
您所有,则需要先将其所有权改回,mongodb
然后 MongoDB 才能再次使用它们:
sudo chown -R mongodb:mongodb /var/lib/mongodb/
总结
要在使用打包发行版时对 MongoDB 运行修复,您需要运行:
sudo -u mongodb mongod --repair --dbpath /var/lib/mongodb/
答案2
我也遇到了同样的问题,并解决了。当我尝试启动时,mongodb
它sudo
显示该进程已在运行()。但我无法通过 shell 访问正在运行的实例。它显示mongodb start/running, process xxxx
连接失败。
解决方案
所以我删除了锁文件:
sudo rm /var/lib/mongodb/mongod.lock
然后我重新启动了服务:
sudo service mongodb start
然后 Mongo 又可以在我的机器上工作了!
答案3
我在自己的机器(Windows 安装)中启动 mongod.exe 时也遇到了类似的问题。问题出.lock
在某个文件上C:\data\db
。我删除了该文件,问题就解决了。
答案4
遇到了类似的问题,原因有点愚蠢;我的磁盘空间不足。
检查 /var/log/mongodb/mongod.log 上的日志我发现了以下行:
2015-04-13T10:56:37.132+0200 [initandlisten] ERROR: Insufficient free space for journal files
希望这可以为某些人节省半小时的生命。