连接被拒绝 MongoDB errno 111

Posted

技术标签:

【中文标题】连接被拒绝 MongoDB errno 111【英文标题】:Connection refused to MongoDB errno 111 【发布时间】:2014-09-14 00:13:58 【问题描述】:

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

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

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 上与 进行连接,但是当我尝试使用以下命令从 连接到我的 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 正在运行吗?可以本地连接吗? mongod 在本地运行,是的,我可以在本地连接。 【参考方案1】:

感谢大家的帮助!

原来是iptable冲突。列出端口打开的两条规则(导致端口关闭)。

但是,如果不是因为冲突,aka 的一个 cmets 和 manu2013 的另一个 cmets 是我会遇到的问题。

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

此外,请确保您的 iptable 中没有与 mongo 想要的端口冲突的规则(请参阅 link on mongodb's site 以正确设置您的 iptables)。

【讨论】:

或者只是在connectionString中使用127.0.0.1,而不是localhost,并在内部连接... 别忘了sudo service mongod restart 不要在生产中使用bind_ip = 0.0.0.0!!!!或者你会公开你的服务器…… @vinyll 然后你应该使用 UFW(防火墙)限制特定的 ips【参考方案2】:

尝试以下方法:

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

【讨论】:

不走运。仍然出现连接失败。感谢您的尝试。 您的 MongoD 服务器是否必须监听所有接口? 2.6.x 默认设置为仅在 localhost 上侦听。您可以通过“netstat -an | grep 27017”确认这一点,它应该显示 mongod 绑定到的所有 IP 地址。 确保在配置文件 mongodb.conf 中,将 bindIp 设置(早期版本的 bind_ip)设置为通过分配值 0.0.0.0 来侦听所有接口。默认情况下,它只在 localhost 上侦听,因为它的默认值为 127.0.0.1 。 有时您需要删除mongodb-&lt;port&gt;.sock 文件。在我的情况下,它位于 /tmp 文件夹 @MatanTubul 在尝试了一切但没有任何效果之后,从 /tmp 中删除文件解决了它。谢谢!【参考方案3】:

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

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://***.com/a/24410282/4359237

【讨论】:

如果我运行这个命令,它会删除我存储在数据库中的数据 @devend 它不应该作为修复命令在所有数据库上运行repairDatabase 命令。 repairDatabase:检查和修复数据存储中的错误和不一致。 repairDatabase 类似于文件系统的 fsck 命令。 Reference【参考方案4】:

对于 Ubuntu Server 15.04 和 16.04,您只需执行此命令

sudo apt-get install --reinstall mongodb

【讨论】:

【参考方案5】:

我没有/data/db 目录。我创建了一个并授予了chmod 777 权限,它对我有用

【讨论】:

【参考方案6】:

对我来说,将 /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

【讨论】:

【参考方案7】:

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

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

这在生产环境中也是一个可接受的选项...

【讨论】:

【参考方案8】:

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

【讨论】:

【参考方案9】:

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

您可以使用/var/log/mongodb查看日志

【讨论】:

MongoDB应该陆续升级到各个主要版本,直到达到目标。这种情况下,需要先升级到3.4,还需要配置featureCompatibilityVersion:docs.mongodb.com/manual/release-notes/3.6-upgrade-standalone,这样就不需要删除数据文件了,如果你的数据库很大的话,这绝对不是一个选择。 【参考方案10】:

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

How to Install MongoDB on Ubuntu 16.04

我也犯了同样的错误。最后发现需要设置端口号

mongo命令的默认端口号是27017

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

【讨论】:

【参考方案11】:

这对我来说成功了

sudo service mongod restart

【讨论】:

【参考方案12】:

即使端口是开放的,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

【讨论】:

以上是关于连接被拒绝 MongoDB errno 111的主要内容,如果未能解决你的问题,请参考以下文章

GraphQL:[Errno 111] 连接被拒绝

Python socket.error:[Errno 111] 连接被拒绝

Django- [Errno 111] 使用 smtp 时连接被拒绝

将 Celery 与 SQS 一起使用时 Errno 111 连接被拒绝

无法连接到 amqp://guest:**@127.0.0.1:5672//: [Errno 111] 连接被拒绝

OperationalError:(2003,“无法连接到'localhost'上的MySQL服务器([Errno 111]连接被拒绝)”)[关闭]