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

Posted

技术标签:

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

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

Can't connect to mysql server error 111 Trying to connect to remote MySQL host (error 2003)

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

    在my.cnf中评论bind-address

    # bind-address      = 192.168.1.3
    

    授予权限:

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

    为防火墙配置 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
    

    重启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 端口的原始连接,所以它正在正确地监听那个地址! 【参考方案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”,请参阅此处提供的答案:***.com/a/16164426/1768736 192.168.1.3 是private IPv4 地址空间的 16 位块的一部分,因此除非有 ***,否则不是很遥远。【参考方案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),那么你必须传递一个空字符串作为密码

【讨论】:

以上是关于错误 2003 (HY000): 无法连接到 MySQL 服务器 (111)的主要内容,如果未能解决你的问题,请参考以下文章

ERROR 2003 (HY000): Can’t connect to MySQL server on ‘127.0.0.1’ (111) 修复无法连接到MySQL服务器

从今天起无法通过 XAMPP 连接到本地 MY SQL 数据库 (mysqli_real_connect(): (HY000/2002))

尝试连接到远程 MySQL 主机(错误 2003)

错误 2002 (HY000): 无法通过套接字 '/tmp/mysql.sock' 连接到本地 MySQL 服务器

错误 2002 (HY000): 无法通过套接字 '/tmp/mysql.sock' 连接到本地 MySQL 服务器

错误 2002 (HY000): 无法通过 '/var/run/mysqld/mysqld.sock' 连接到本地 MySQL 服务器 (2)