无法连接到服务器 127.0.0.1:27017。

182

我遇到了以下错误:

alex@alex-K43U:/$ mongo
MongoDB shell version: 2.2.0
connecting to: test
Thu Oct 11 11:46:53 Error: couldn't connect to server 127.0.0.1:27017 src/mongo/shell/mongo.js:91
exception: connect failed
alex@alex-K43U:/$ 

当我尝试启动MongoDB时,会出现以下情况:

* Starting database mongodb                                             [fail]

我已经尝试过mongo --repair

我对mongodb下的var、lib、data/db和log进行了chown和chmod操作。

不确定还需要做什么。 有什么建议吗?

mongodb.log:

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


Thu Oct 11 08:29:40 
Thu Oct 11 08:29:40 warning: 32-bit servers don't have journaling enabled by default. Please use --journal if you want durability.
Thu Oct 11 08:29:40 
Thu Oct 11 08:29:41 [initandlisten] MongoDB starting : pid=1052 port=27017 dbpath=/var/lib/mongodb 32-bit host=alex-K43U
Thu Oct 11 08:29:41 [initandlisten] 
Thu Oct 11 08:29:41 [initandlisten] ** NOTE: when using MongoDB 32 bit, you are limited to about 2 gigabytes of data
Thu Oct 11 08:29:41 [initandlisten] **       see http://blog.mongodb.org/post/137788967/32-bit-limitations
Thu Oct 11 08:29:41 [initandlisten] **       with --journal, the limit is lower
Thu Oct 11 08:29:41 [initandlisten] 
Thu Oct 11 08:29:41 [initandlisten] db version v2.2.0, pdfile version 4.5
Thu Oct 11 08:29:41 [initandlisten] git version: f5e83eae9cfbec7fb7a071321928f00d1b0c5207
Thu Oct 11 08:29:41 [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 08:29:41 [initandlisten] options: { config: "/etc/mongodb.conf", dbpath: "/var/lib/mongodb", logappend: "true", logpath: "/var/log/mongodb/mongodb.log" }
Thu Oct 11 08:29:41 [initandlisten] Unable to check for journal files due to: boost::filesystem::basic_directory_iterator constructor: No such file or directory: "/var/lib/mongodb/journal"
************** 
Unclean shutdown detected.
Please visit http://dochub.mongodb.org/core/repair for recovery instructions.
*************
Thu Oct 11 08:29:41 [initandlisten] exception in initAndListen: 12596 old lock file, terminating
Thu Oct 11 08:29:41 dbexit: 
Thu Oct 11 08:29:41 [initandlisten] shutdown: going to close listening sockets...
Thu Oct 11 08:29:41 [initandlisten] shutdown: going to flush diaglog...
Thu Oct 11 08:29:41 [initandlisten] shutdown: going to close sockets...
Thu Oct 11 08:29:41 [initandlisten] shutdown: waiting for fs preallocator...
Thu Oct 11 08:29:41 [initandlisten] shutdown: closing all files...
Thu Oct 11 08:29:41 [initandlisten] closeAllFiles() finished
Thu Oct 11 08:29:41 dbexit: really exiting now

编辑:

我移除了锁定,然后进行了mongod修复,但是出现了以下错误:

Thu Oct 11 12:05:37 [initandlisten] exception in initAndListen: 10309 Unable to create/open lock file: /data/db/mongod.lock errno:13 Permission denied Is a mongod instance already running?, terminating

所以我使用sudo执行了它:

alex@alex-K43U:~$ sudo mongod --repair
Thu Oct 11 12:05:42 
Thu Oct 11 12:05:42 warning: 32-bit servers don't have journaling enabled by default. Please use --journal if you want durability.
Thu Oct 11 12:05:42 
Thu Oct 11 12:05:42 [initandlisten] MongoDB starting : pid=5129 port=27017 dbpath=/data/db/ 32-bit host=alex-K43U
Thu Oct 11 12:05:42 [initandlisten] 
Thu Oct 11 12:05:42 [initandlisten] ** NOTE: when using MongoDB 32 bit, you are limited to about 2 gigabytes of data
Thu Oct 11 12:05:42 [initandlisten] **       see http://blog.mongodb.org/post/137788967/32-bit-limitations
Thu Oct 11 12:05:42 [initandlisten] **       with --journal, the limit is lower
Thu Oct 11 12:05:42 [initandlisten] 
Thu Oct 11 12:05:42 [initandlisten] db version v2.2.0, pdfile version 4.5
Thu Oct 11 12:05:42 [initandlisten] git version: f5e83eae9cfbec7fb7a071321928f00d1b0c5207
Thu Oct 11 12:05:42 [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 12:05:42 [initandlisten] options: { repair: true }
Thu Oct 11 12:05:42 [initandlisten] Unable to check for journal files due to: boost::filesystem::basic_directory_iterator constructor: No such file or directory: "/data/db/journal"
Thu Oct 11 12:05:42 [initandlisten] finished checking dbs
Thu Oct 11 12:05:42 dbexit: 
Thu Oct 11 12:05:42 [initandlisten] shutdown: going to close listening sockets...
Thu Oct 11 12:05:42 [initandlisten] shutdown: going to flush diaglog...
Thu Oct 11 12:05:42 [initandlisten] shutdown: going to close sockets...
Thu Oct 11 12:05:42 [initandlisten] shutdown: waiting for fs preallocator...
Thu Oct 11 12:05:42 [initandlisten] shutdown: closing all files...
Thu Oct 11 12:05:42 [initandlisten] closeAllFiles() finished
Thu Oct 11 12:05:42 [initandlisten] shutdown: removing fs lock...
Thu Oct 11 12:05:42 dbexit: really exiting now

但仍然存在相同的问题。

1
我认为这个链接会对你有所帮助: https://dev59.com/7mkw5IYBdhLWcg3wyNgV 通过更改Mongo的数据库路径。 - medhatdawoud
10
sudo service mongod restart 对我起了作用。 - Sudip Bhandari
37个回答

173
Step 1: Remove lock file.
sudo rm /var/lib/mongodb/mongod.lock

Step 2: Repair mongodb. 
sudo mongod --repair 

Step 3: start mongodb.
sudo start mongodb 
or
sudo service mongodb start

Step 4: Check status of mongodb.
sudo status mongodb 
or   
sudo service mongodb status

Step 5: Start mongo console.
mongo 

2
你好, Nanhe Kumar,请问终端中的初始路径是什么。我们应该进入cd / usr / local / opt / mongodb /文件夹还是其他位置?我遇到了以下问题Vijayvir-Singh:〜vijayvir $ sudo rm / var / lib / mongodb / mongod.lock rm:/ var / lib / mongodb / mongod.lock:没有那个文件或目录 Vijayvir-Singh:〜vijayvir $ - Vijayvir Sing Pantlia
1
@vvss 首先找到文件的路径。使用这个命令:locate mongod.lock。 - Nanhe Kumar
9
在版本2.4.8中,它是/data/db/mongod.lock而不是/var/lib/mongodb/mongod.lock - Loolooii

91

你在运行mongo之前是否已经运行了mongod

我按照http://docs.mongodb.org/manual/tutorial/install-mongodb-on-os-x/中的安装说明进行了mongodb的安装,当我在实际运行mongod之前先运行mongo时,我遇到了和你一样的错误。我以为安装mongodb后它会自动启动,但实际上你需要手动使用mongod启动它,然后再进行其他需要mongodb的操作。


10
这是我的问题。我很惊讶在“Mongo入门”文档中没有明确说明这一点。 - tadasajon
从用户体验的角度来看,这真的毫无意义。mongo.exe 应该是启动数据库的那个。 - Moshe Karmel

87

这是因为mongod进程已关闭,您必须按照下面的命令来启动mongod进程:

~$ sudo service mongodb stop

~$ sudo rm /var/lib/mongodb/mongod.lock

~$ sudo mongod --repair --dbpath /var/lib/mongodb

~$ sudo mongod --fork --logpath /var/lib/mongodb/mongodb.log --dbpath /var/lib/mongodb

~$ sudo service mongodb start

希望这能帮到你。


2
问题已解决。谢谢。在第一个命令之前,我会添加命令sudo service mongod stopsudo service mongodb stop,因为有些人可能仍在运行它们。 - Georgi Georgiev
1
它帮助我重新启动了Mongo,但是我无法再访问旧的数据库了。你能帮我解决一下吗? - Ehsan

39

日志显示mongodb正在终止,因为存在一个旧的锁定文件。

如果您没有运行或者不是使用日志记录功能,那么请删除锁定文件,运行修复操作,然后重新启动mongodb。

如果您正在运行或曾经运行过开启了日志记录功能,请参考相关的Mongo DB文档。需要注意的是,他们说:“如果您正在运行日志记录功能,不应进行修复以恢复到一致状态。”因此,如果您开启了日志记录功能,修复可能会使情况变得更糟。


30
修理会损坏物品,这很糟糕! - UpTheCreek
1
在启用日志记录的情况下,如果我经常遇到连接被拒绝的错误,应该怎么办? - Shashank

13

尝试

sudo service mongodb start
这解决了我的问题。

sudo service mongod startsudo service mongodb start有什么区别? - geckob
我不是很确定,但猜测mongodb是服务的名称,而mongod是程序文件的名称。 - 潘博韜

10

MAC OS

如果你使用的是 MAC 并且安装了 MongoDB 4.4,你可以运行以下命令:

brew services start mongodb-community@4.4

8

检查您的文件系统剩余空间,如果不足,请增加空间。这也可能导致Mongo无法启动。检查/var/log/mongodb/mongodb.log文件。

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

这种情况发生在我身上,我在文件 /etc/mongod.conf 中加入了 smallfiles=true。 - Carlos

7

首先,您需要通过以下命令删除mongod.lock文件

sudo rm /var/lib/mongodb/mongod.lock

然后通过下面的命令重新启动Mongo服务

sudo service mongod restart 

7

在运行 mongo 命令之前,尝试先运行 mongod

在我的 openSUSE 上,可以使用命令 sudo /usr/sbin/mongod 来达到目的。

这样就解决了我的问题。


6
在Windows中以管理员身份运行cmd
1.创建目录:
mkdir c:\mongo\data\db

2.安装服务:

mongod.exe --install --logpath c:\mongo\logs --logappend --bind_ip 127.0.0.1 --dbpath c:\mongo\data\db --directoryperdb

3. 启动 MongoDB:

net start MongoDB

4.启动Mongo Shell:

c:\mongo\bin\mongo.exe

这个解决方案对我起作用了。

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