MongoDB 服务器无法启动

3

我正在使用Django框架。我的客户端是js,后端使用mongodb。两天前,我停止并重新启动了Apache2服务器,网站正常运行。今天突然出现了500内部服务器错误。当我检查error.log文件时,它显示:

[.....] ConnectionError: Cannot connect to the database:
[.....] could not connect to localhost:27017: [Errno 111] Connection refused

所以,我尝试用以下方式通过python测试与mongodb的连接:

>>> from pymongo import Connection
>>> connection = Connection('localhost',27017)
 Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
 File "/usr/local/lib/python2.6/dist-packages/pymongo/connection.py", line 381, in __init__
self.__find_node()
File "/usr/local/lib/python2.6/dist-packages/pymongo/connection.py", line 659, in __find_node
raise AutoReconnect(', '.join(errors))
pymongo.errors.AutoReconnect: could not connect to localhost:27017: [Errno 111] Connection refused

我使用$mongo测试连接,显示如下:
MongoDB shell version: 2.4.9
connecting to: test
Mon Jan 20 15:22:53.729 Error: couldn't connect to server 127.0.0.1:27017 at    src/mongo/shell/mongo.js:145
exception: connect failed

我试图寻找解决这个问题的答案,发现有人建议删除mongod.lock文件并重新启动mongodb,例如在Pymongo keeps refusing the connection at 27017MongoDB won't start after server crash等网站中。但是在http://docs.mongodb.org/manual/tutorial/recover-data-following-unexpected-shutdown/中写道:在正常操作中,您不应删除mongod.lock文件并启动mongod。相反,请考虑上述方法之一来恢复数据库并删除锁定文件。在紧急情况下,您可以删除锁定文件,并使用可能已损坏的文件启动数据库,并尝试从数据库中恢复数据;但是,在这些情况下无法预测数据库的状态。我真的很困惑该怎么做?我应该删除mongod.lock文件吗?而且,我需要先启动mongodb服务器,然后再启动apache2服务器吗?Mongodb日志文件显示:
   tail -n -30 mongodb.log 

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


   Mon Jan 20 15:10:19.740 [initandlisten] MongoDB starting : pid=8061 port=27017    dbpath=/var/lib/mongodb 64-bit host=hand
   Mon Jan 20 15:10:19.740 [initandlisten] db version v2.4.9
   Mon Jan 20 15:10:19.740 [initandlisten] git version:   xxxxx //gives the number
   Mon Jan 20 15:10:19.740 [initandlisten] build info:  xxxx 
   Mon Jan 20 15:10:19.740 [initandlisten] allocator: tcmalloc
   Mon Jan 20 15:10:19.740 [initandlisten] options: { config: "/etc/mongodb.conf", dbpath: "/var/lib/mongodb", logappend: "true", logpath: "/var/log/mongodb/mongodb.log" }
   Mon Jan 20 15:10:19.742 [initandlisten] journal dir=/var/lib/mongodb/journal
   Mon Jan 20 15:10:19.742 [initandlisten] recover : no journal files present, no recovery needed
   Mon Jan 20 15:10:19.742 [initandlisten] 
   Mon Jan 20 15:10:19.742 [initandlisten] ERROR: Insufficient free space for journal files
   Mon Jan 20 15:10:19.742 [initandlisten] Please make at least 3379MB available in /var/lib/mongodb/journal or use --smallfiles
   Mon Jan 20 15:10:19.742 [initandlisten] 
   Mon Jan 20 15:10:19.743 [initandlisten] exception in initAndListen: 15926 Insufficient free space for journals, terminating
   Mon Jan 20 15:10:19.743 dbexit: 
   Mon Jan 20 15:10:19.743 [initandlisten] shutdown: going to close listening sockets...
   Mon Jan 20 15:10:19.743 [initandlisten] shutdown: going to flush diaglog...
   Mon Jan 20 15:10:19.743 [initandlisten] shutdown: going to close sockets...
   Mon Jan 20 15:10:19.743 [initandlisten] shutdown: waiting for fs preallocator...
   Mon Jan 20 15:10:19.743 [initandlisten] shutdown: lock for final commit...
   Mon Jan 20 15:10:19.743 [initandlisten] shutdown: final commit...
   Mon Jan 20 15:10:19.743 [initandlisten] shutdown: closing all files...
   Mon Jan 20 15:10:19.743 [initandlisten] closeAllFiles() finished
   Mon Jan 20 15:10:19.743 [initandlisten] journalCleanup...
   Mon Jan 20 15:10:19.743 [initandlisten] removeJournalFiles
   Mon Jan 20 15:10:19.743 [initandlisten] shutdown: removing fs lock...
   Mon Jan 20 15:10:19.743 dbexit: really exiting now

如果我运行以下命令,它会显示:
   $ sudo service mongodb start
     Starting database: mongodb failed!

你的mongod看起来停了,如果重新启动它会怎样? - Sammaye
请查看我的更新问题 - MongoDB 启动失败 - user2481422
你的更新只显示了退出,没有显示错误,请问你在日志中得到了什么错误? - Sammaye
1个回答

2

好的,错误信息非常清楚:您没有足够的磁盘空间可用:

ERROR: Insufficient free space for journal files
   Please make at least 3379MB available in 
                                   /var/lib/mongodb/journal or use --smallfiles
   exception in initAndListen: 15926 Insufficient free space for journals, terminating

通常情况下,MongoDB对磁盘空间的需求比较大。特别是恢复和压缩过程会消耗大量磁盘空间,因为它会复制处理的数据文件。请确保始终保留几个G的可用空间。


是的,但如何释放日志目录中的空间? - user2481422
这主要是一个管理员问题。要么删除该分区中不再需要的数据,要么添加新的硬盘/分区并将其挂载到日志目录。通常最好使用不同的物理磁盘来存储日志,因为它具有不同的访问模式。在这种设置下,MongoDB也会默认更频繁地提交到日志(30毫秒而不是100毫秒)。 - mnemosyn

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接