ERROR 2003(HY000):无法连接到MySQL服务器(111)

Nic*_*uiz 32 mysql linux remote-access mysql-error-2003

此问题与以下问题有关:

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

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

    # bind-address      = 192.168.1.3
    
    Run Code Online (Sandbox Code Playgroud)
  2. 授予权限:

    GRANT ALL PRIVILEGES ON *.* TO 'nickruiz'@'%' IDENTIFIED BY PASSWORD 'xxxx';
    
    Run Code Online (Sandbox Code Playgroud)
  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
    
    Run Code Online (Sandbox Code Playgroud)
  5. 重启mysql服务器 sudo /etc/init.d/mysql restart

测试时,我得到以下内容:

LAN:

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)
Run Code Online (Sandbox Code Playgroud)

远程:

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

显然有一些错误导致我无法使用我的全球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.
Run Code Online (Sandbox Code Playgroud)

Toi*_*Lee 14

请检查您的收听端口:

netstat -nat |grep :3306
Run Code Online (Sandbox Code Playgroud)

如果它显示

 tcp        0      0 0.0.0.0:3306            0.0.0.0:*               LISTEN 
Run Code Online (Sandbox Code Playgroud)

多数民众赞成你的远程连接.

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

tcp        0     192.168.1.3:3306            0.0.0.0:*               LISTEN 
Run Code Online (Sandbox Code Playgroud)

多数民众赞成你的远程连接.您还应该检查防火墙(iptables如果你是centos/redhat)

services iptables stop
Run Code Online (Sandbox Code Playgroud)

用于测试或使用:

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
Run Code Online (Sandbox Code Playgroud)

另外还要检查远程连接的授予权限:

GRANT ALL ON *.* TO remoteUser@'remoteIpadress' IDENTIFIED BY 'my_password';
Run Code Online (Sandbox Code Playgroud)

  • 如果在执行netstat命令时没有看到"0.0.0.0:3306",请参阅此处提供的答案:http://stackoverflow.com/a/16164426/1768736 (3认同)

Int*_*ess 6

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

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


Nic*_*GPS 5

检查您的远程主机(即您尝试连接的 Web 托管服务器)是否允许端口 3306 上的传出流量。

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

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