【问题标题】:ERROR 2003 (HY000): Can't connect to MySQL server (111)错误 2003 (HY000): 无法连接到 MySQL 服务器 (111)
【发布时间】:2012-07-30 07:05:37
【问题描述】:

这个问题与以下问题有关:

我正在本地机器上配置一个新的 MySQL (5.1) 服务器。我需要提供对数据库的远程访问。我做了以下步骤:

  1. 在my.cnf中评论bind-address

    # bind-address      = 192.168.1.3
    
  2. 授予权限:

    GRANT ALL PRIVILEGES ON *.* TO 'nickruiz'@'%' IDENTIFIED BY PASSWORD 'xxxx';
    
  3. 在路由器上设置端口转发(TCP 和 UDP,端口 3306、192.168.1.3)
  4. 为防火墙配置 iptables

    sudo iptables -I INPUT -p udp --dport 3306 -j ACCEPT
    
    sudo iptables -I INPUT -p tcp --dport 3306 --syn -j ACCEPT
    
    sudo iptables-save
    
  5. 重启mysql服务器sudo /etc/init.d/mysql restart

在测试时,我得到以下信息:

局域网:

mysql -h 192.168.1.3 -u nickruiz -p
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 95
Server version: 5.1.63-0ubuntu0.11.04.1 (Ubuntu)

远程:

mysql -h 1xx.xx.4.136 -u nickruiz -p
ERROR 2003 (HY000): Can't connect to MySQL server on '1xx.xx.4.136' (111)

显然有什么问题让我无法使用我的全球 IP 地址。

注意事项:

  • 我试过在同一台机器上测试远程连接 通过远程机器上的 SSH。
  • 我不确定我的 ISP 是否给了我一个静态 IP。

有什么想法吗?

更新: telnet 似乎无法正常工作。

telnet 192.168.1.3 3306
Trying 192.168.1.3...
Connected to 192.168.1.3.
Escape character is '^]'.
E
5.1.63-0ubuntu0.11.04.1,0g8!:@pX;]DyY0#\)SIConnection closed by foreign host.

【问题讨论】:

  • 你的 my.cnf 中没有skip-networking,是吗?
  • 还有telnet 192.168.1.3 3306。如果它打开任何类型的提示,则端口正在侦听并接受连接。
  • my.cnf 中没有跳过网络。
  • Telnet 不工作。见上文。
  • 其实就是telnet工作正常。如果您获得连接和Escape character is ^],那么您已经成功建立了连接。你不会看到 MySQL 提示,但你有一个到 MySQL 端口的原始连接,所以它正在正确地监听那个地址!

标签: mysql linux remote-access mysql-error-2003


【解决方案1】:

errno 111 是 ECONNREFUSED,我想路由器的 DNAT 有问题。

您的 ISP 也可能正在过滤该端口。

【讨论】:

    【解决方案2】:

    不确定,因为在您提到的步骤中看不到。

    请尝试FLUSH PRIVILEGES [从mysql数据库的授权表重新加载权限]:

    刷新权限;

    需要在GRANT之后执行

    希望对您有所帮助!

    【讨论】:

      【解决方案3】:

      检查您的远程主机(即您尝试从其连接的网络托管服务器)是否允许端口 3306 上的 OUTGOING 流量。

      我在这种情况下看到了 (100) 错误。我可以从我的 PC/Mac 连接,但不能从我的网站连接。 MySQL 实例可以通过 Internet 访问,但我的托管公司不允许我的网站连接到端口 3306 上的数据库。

      一旦我要求我的托管公司打开我的网络托管帐户,最多可以通过端口 3306 传出流量,我的网站就可以连接到我的远程数据库。

      【讨论】:

        【解决方案4】:

        如果你使用的系统是CentOS/RedHat,而你安装MySQL的方式是rpm,/etc/文件夹下没有my.cnf,你可以使用: #哪里是mysql #cd /usr/share/mysql/ cp -f /usr/share/mysql/my-medium.cnf /etc/my.cnf

        【讨论】:

          【解决方案5】:

          请检查您的监听端口:

          netstat -nat |grep :3306
          

          如果显示

           tcp        0      0 0.0.0.0:3306            0.0.0.0:*               LISTEN 
          

          远程连接没问题。

          但在这种情况下,我认为你有

          tcp        0     192.168.1.3:3306            0.0.0.0:*               LISTEN 
          

          您的远程连接没问题。 您还应该检查您的防火墙(如果您使用 centos/redhat,则为 iptables)

          services iptables stop
          

          用于测试或使用:

          iptables -A input -p tcp -i eth0 --dport 3306 -m state NEW,ESTABLISHED -j ACCEPT
          iptables -A output -p tcp -i eth0 --sport 3306 -m state NEW,ESTABLISHED -j ACCEPT
          

          还有一件事是检查您对远程连接的授予权限:

          GRANT ALL ON *.* TO remoteUser@'remoteIpadress' IDENTIFIED BY 'my_password';
          

          【讨论】:

          • 如果您在执行 netstat 命令时没有看到“0.0.0.0:3306”,请参阅此处提供的答案:stackoverflow.com/a/16164426/1768736
          • 192.168.1.3private IPv4 地址空间的 16 位块的一部分,因此除非有 VPN,否则不是很遥远。
          【解决方案6】:
          /etc/mysql$ sudo nano my.cnf
          

          对我有用的相关部分:

          #skip-networking
          # Instead of skip-networking the default is now to listen only on
          # localhost which is more compatible and is not less secure.
          bind-address            = MY_IP
          

          MY_IP 可以使用ifconfigcurl -L whatismyip.org |grep blue 找到。

          重启mysql以确保加载新配置:

          /etc/mysql$ sudo service mysql restart
          

          【讨论】:

            【解决方案7】:

            我也有和你一样的问题,我用wireshark抓包我发送的TCP包,我发现当我用mysqlbin连接远程主机时,它连接了远程的3307端口,这是我在/etc/mysql/my.cnf中的错误, 3307 是另一个项目的mysql端口,但是我在my.cnf [client] 部分更改了该配置,当我使用-P 选项指定3306端口时,就可以了。

            【讨论】:

              【解决方案8】:

              我如上所述正确设置了我的绑定地址,但忘记重新启动 mysql 服务器(或重新启动):) face palm - 这就是我这个错误的根源!

              【讨论】:

                【解决方案9】:

                我在尝试连接到远程 mysql 数据库时遇到了同样的问题。

                我通过打开数据库服务器上的防火墙以允许流量通过来修复它:

                sudo ufw allow mysql
                

                【讨论】:

                  【解决方案10】:

                  有时当您的密码中有特殊字符时,您需要将其包装在'' 字符中,以便连接到数据库,您可以使用:

                  mysql -uUSER -p'pa$$w0rd'

                  我遇到了同样的错误,这个解决方案解决了它。

                  【讨论】:

                    【解决方案11】:

                    我遇到了同样的错误,但我不明白,但我意识到我的调制解调器正在使用与 mysql 相同的端口。好吧,我通过sudo systemctl stop apache2.service 停止apache2.service 并重新启动xammp,sudo /opt/lampp/lampp start

                    也许,如果你还没有使用 mysql 的密码 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES),那么你必须传递一个空字符串作为密码

                    【讨论】:

                      猜你喜欢
                      • 2010-12-13
                      • 1970-01-01
                      • 1970-01-01
                      • 2014-05-10
                      • 2018-12-05
                      • 1970-01-01
                      • 2014-02-02
                      • 1970-01-01
                      • 1970-01-01
                      相关资源
                      最近更新 更多