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

时间:2012-08-01 11:33:30

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

此问题与以下问题有关:

我正在本地计算机上配置新的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

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

    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)
    

    远程:

    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.
    

11 个答案:

答案 0 :(得分:11)

请通过以下方式检查您的收听端口:

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 

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

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';

答案 1 :(得分:6)

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

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

答案 2 :(得分:4)

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

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

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

答案 3 :(得分:3)

/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_IPifconfig找到

curl -L whatismyip.org |grep blue

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

/etc/mysql$ sudo service mysql restart

答案 4 :(得分:0)

如果您使用的系统是CentOS / RedHat,并且rpm是您安装MySQL的方式,则/ etc /文件夹中没有my.cnf,您可以使用:   #whereis mysql   #cd / usr / share / mysql /   cp -f /usr/share/mysql/my-medium.cnf /etc/my.cnf

答案 5 :(得分:0)

我有一个像你一样的问题,我使用wireshark捕获我发送的TCP数据包,我发现当我使用mysql bin连接远程主机时,它连接远程主机的3307端口,那个& #39; s我在/etc/mysql/my.cnf中的falut,3307是另一个项目mysql端口,但我更改了my.cnf [client]部分中的配置,当我使用-P选项指定3306端口时,没关系。

答案 6 :(得分:0)

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

答案 7 :(得分:0)

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

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

sudo ufw allow mysql

答案 8 :(得分:0)

有时当你在密码中有特殊字符时,你需要用''字符包装它,所以连接到db你可以使用:

mysql -uUSER -p'pa$$w0rd'

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

答案 9 :(得分:0)

我也有同样的错误,我不明白,但是我意识到我的调制解调器使用的端口与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),那么您必须传递一个空字符串作为密码

答案 10 :(得分:-1)

不确定无法按照你提到的步骤看到它。

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

刷新权限;

您需要在GRANT

之后执行它

希望这有帮助!