【问题标题】:Connection refused to MongoDB errno 111连接被拒绝 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 在本地运行,是的,我可以在本地连接。

标签: linux mongodb firewall iptables


【解决方案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://stackoverflow.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
                

                【讨论】:

                  猜你喜欢
                  • 2019-12-13
                  • 2016-11-12
                  • 2020-11-22
                  • 2021-06-08
                  • 2021-08-23
                  • 2011-08-13
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  相关资源
                  最近更新 更多