错误 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/1768736192.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
可以使用ifconfig
或curl -L whatismyip.org |grep blue
找到。
重启mysql以确保加载新配置:
/etc/mysql$ sudo service mysql restart
【讨论】:
【参考方案7】:我也有和你一样的问题,我用wireshark抓包我发送的TCP包,我发现当我用mysql
bin连接远程主机时,它连接了远程的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))
错误 2002 (HY000): 无法通过套接字 '/tmp/mysql.sock' 连接到本地 MySQL 服务器
错误 2002 (HY000): 无法通过套接字 '/tmp/mysql.sock' 连接到本地 MySQL 服务器
错误 2002 (HY000): 无法通过 '/var/run/mysqld/mysqld.sock' 连接到本地 MySQL 服务器 (2)