连接被拒绝 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 表中,其中
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 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-<port>.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的主要内容,如果未能解决你的问题,请参考以下文章
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]连接被拒绝)”)[关闭]