更换网站托管方案后MySQL远程连接失败,报错Can't connect to MySQL server on 'x.x.x.x' (113)
解决远程MySQL连接报错
Can't connect to MySQL server on 'x.x.x.x' (113) 首先得明确:错误码113本质是网络层面的连接无法到达/被拒绝,不是你的MySQL账号权限问题(毕竟之前完全正常,换托管后才出问题),咱们一步步排查:
先排查新网站托管环境的出站防火墙/安全组
很多托管商的默认配置会限制对外的端口连接,尤其是MySQL默认的3306端口。你可以在网站服务器上执行这两个命令测试连通性:telnet x.x.x.x 3306 # 或者用nc(如果安装了的话) nc -zv x.x.x.x 3306如果命令返回连接失败,那肯定是新主机的出站规则把3306端口给禁了。要么去托管商的控制面板手动添加允许访问VPS IP和3306端口的规则,要么联系客服开权限。
检查VPS的入站防火墙/安全组
虽然之前正常,但难保VPS的防火墙规则被误改了,或者新网站服务器的公网IP不在允许列表里。- 如果是用ufw(Ubuntu/Debian常用),执行
ufw status看看有没有允许3306端口的入站规则; - 如果是iptables,执行
iptables -L -n过滤3306相关规则; - 如果是云服务商的安全组(比如阿里云、AWS),去控制台确认是否允许新网站IP访问3306,或者是否还保持着允许所有IP(对应你设置的
'myuser'@'%')的规则。
- 如果是用ufw(Ubuntu/Debian常用),执行
确认MySQL的绑定IP配置
有时候VPS上的MySQL配置文件(my.cnf或my.ini)里的bind-address会被改成127.0.0.1,这样就只能本地访问。你可以:- 找到配置文件(通常在
/etc/mysql/my.cnf或者/etc/mysql/mysql.conf.d/mysqld.cnf); - 查看
bind-address的值,改成0.0.0.0(允许所有IP连接); - 重启MySQL服务:
systemctl restart mysql(Ubuntu/Debian)或service mysqld restart(CentOS)。
- 找到配置文件(通常在
核对VPS的公网IP是否正确
别笑,这个真的容易忽略!有没有可能VPS的公网IP换了?你代码里的$servername还是旧的IP?直接ping一下VPS的域名(如果有的话),或者登录VPS查一下当前公网IP,确保和代码里的一致。检查托管商的方案限制
有些低价托管方案会限制对外的数据库连接,尤其是远程MySQL,可能是出于安全或资源管控。你可以翻一下托管商的官方文档,或者直接问客服:当前方案是否允许出站连接到外部的3306端口?
内容的提问来源于stack exchange,提问作者Coder1337
相关产品推荐
相关产品推荐

