与MongoDB errno 111的连接被拒绝


78

我有一台运行Ubuntu 12.04 LTS和MongoDB实例(服务正在运行并且可以在本地连接)的Linode服务器,我无法从外部来源连接到该服务器。

我已将这两个规则添加到我的IP表中,其中<ip address>是我要连接FROM的服务器(如本MongoDB参考中所述):

iptables -A INPUT -s < ip-address > -p tcp --destination-port 27017 -m state --state NEW,ESTABLISHED -j ACCEPT

iptables -A OUTPUT -d < ip-address > -p tcp --source-port 27017 -m state --state ESTABLISHED -j ACCEPT

而且我在IP表中看到一条规则,该规则允许27017与<ip地址>之间的连接,但是当我尝试使用以下命令从<ip地址>连接到mongo数据库时:

mongo databasedomain/databasename -u username -p password

我收到此错误:

2014-07-22T23:54:03.093+0000 warning: Failed to connect to databaseserverip:27017, reason: errno:111 Connection refused 2014-07-22T23:54:03.094+0000 Error: couldn't connect to server < ip address >:27017 (databaseserverip), connection attempt failed at src/mongo/shell/mongo.js:148 exception: connect failed

任何帮助都非常感谢!!!!谢谢!!!


您确定其他mongod正在运行吗?您可以在本地连接吗?
Sammaye

mongod在本地运行,是的,我可以在本地连接。
dbcooper 2014年

Answers:


124

感谢大家的帮助!

原来这是一个iptable冲突。有两个规则列出了打开的端口(导致端口关闭)。

但是,aka的一项评论和manu2013的另一项评论是我所遇到的问题,即使不是因为冲突。

所以!始终记得编辑/etc/mongod.conf文件并设置您的文件bind_ip = 0.0.0.0以便与外部建立连接。

另外,请确保iptable中没有针对mongo所需端口的规则冲突(请参阅mongodb网站上的链接以正确设置iptables)。


1
或者只是在connectionString中使用127.0.0.1而不是localhost,并在内部进行连接...
Stefan Steiger 2014年

7
别忘了制作sudo service mongod restart
mqklin

9
不要bind_ip = 0.0.0.0在生产中做!!!!否则您将公开暴露您的服务器…
Vinyl

@vinyll然后应该使用UFW(防火墙)限制特定的ips
Raz

47

请尝试以下操作:

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

3
没运气。仍然出现连接故障。感谢您的尝试。
dbcooper 2014年

3
您的MongoD服务器是否必须侦听所有接口?默认情况下,2.6.x被设置为仅在本地主机上侦听。您可以通过“ netstat -an | grep 27017”进行确认,它应该显示mongod绑定到的所有IP地址。
aks 2014年

2
确保在配置文件mongodb.conf中,通过分配值0.0.0.0来将bindIp设置(对于早期版本为bind_ip)设置为侦听所有接口。默认情况下,它仅在localhost上侦听,因为其默认值为127.0.0.1。
manu2013 2014年

有时您需要删除该mongodb-<port>.sock文件。就我而言,它位于/ tmp文件夹中
Matan Tubul

44

这些命令为我解决了这个问题,

sudo rm /var/lib/mongodb/mongod.lock
sudo mongod --repair
sudo service mongod start
sudo service mongod status

如果您落后于代理,请使用:-
导出http_proxy =“ http:// username:password@company.com:port /”
导出https_proxy =“ http:// username:password@company.com:port /”

参考:https : //stackoverflow.com/a/24410282/4359237


如果我运行此命令,它将删除我存储在数据库中的数据
c74ckds

@devend不应这样做,因为repair命令在所有数据库上运行repairDatabase命令。repairDatabase:检查并修复数据存储中的错误和不一致。repairDatabase类似于文件系统的fsck命令。参考
sk1pro99 '16

16

对于Ubuntu Server 15.04和16.04,只需执行以下命令

sudo apt-get install --reinstall mongodb


3

另一个选择是像这样修复数据库(注意:db0目录应该首先被预先创建):

mongod --dbpath /var/lib/mongodb/ --repairpath /var/lib/mongodb/db0

这也是生产环境中可接受的选项。


2

我也遇到了同样的问题。在dbpath中创建一个目录。在我的情况下,在/ data / db中没有目录。所以我创建了一个。现在它可以工作了,请确保对该目录授予权限。


1

在我的情况下,以前的版本是3.2。我已经升级到3.6,但是数据文件与新版本不兼容,因此我删除了所有数据文件,因为它对我及其工作不可用。

您可以使用以下方式检查日志 /var/log/mongodb


在达到目标之前,应先将MongoDB升级到每个主要版本。在这种情况下,您需要首先升级到3.4,还需要配置featureCompatibilityVersion:docs.mongodb.com/manual/release-notes/3.6-upgrade-standalone 这样,您不需要删除数据文件。 ,如果您的数据库很大,那绝对不是一个选择。
sezanzeb

1

我按照本教程的安装说明进行操作

如何在Ubuntu 16.04上安装MongoDB

我有同样的错误。最后,我发现我需要设置端口号

mongo命令的默认端口号是27017

但是mongo.conf中的默认端口号是29999



0

即使端口是打开的,MongoDB当前也仅侦听本地地址127.0.0.1。要允许远程连接,请将服务器的公共可路由IP地址添加到mongod.conf文件中。

在编辑器中打开MongoDB配置文件:

sudo nano /etc/mongodb.conf

将服务器的IP地址添加到bindIP值:

...
logappend=true

bind_ip = 127.0.0.1,your_server_ip
#port = 27017

...

请注意,现在每个拥有用户名和密码的人都可以登录到您的数据库,并且您希望通过仅限制特定IP的连接来避免这种情况。可以使用防火墙完成此操作(有关Google的UFW服务,请参见)。简而言之,应该是这样的:

sudo ufw allow from YOUR_IP to any port 27017

0

对我来说,将/ var / lib / mongodb和/tmp/mongodb-27017.sock的所有权更改为mongodb是解决方法。

做就是了:

sudo chown -R mongodb:mongodb /var/lib/mongodb

然后:

sudo chown mongodb:mongodb /tmp/mongodb-27017.sock

然后启动或重新启动mongodb服务器:

sudo systemctl start mongod

要么

sudo systemctl restart mongod

并检查状态

sudo systemctl status mongod
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.