更换MySQL服务器后PHP报错,代码及MySQL版本均一致
排查MySQL连接切换后PHP报错的问题
我来帮你梳理下这个问题——既然两台MySQL版本完全一致,而且连接第一台服务器时一切正常,那问题大概率出在服务器2的配置或权限设置上,而非代码本身。下面是按优先级排序的排查步骤:
1. 检查MySQL用户访问权限
MySQL的权限是绑定「用户名+来源IP」的,很可能你在服务器1上给PHP连接用的账号开了允许PHP服务器IP访问的权限,但服务器2上的同账号没配置这项:
- 登录服务器2的MySQL,执行查询命令:
SELECT user, host FROM mysql.user WHERE user = '你的PHP连接用户名'; - 如果结果里没有PHP服务器的IP(或者通配符
%,表示允许所有IP访问),就需要给账号授权:GRANT ALL PRIVILEGES ON 你的目标数据库名.* TO '你的用户名'@'PHP服务器的IP地址' IDENTIFIED BY '你的数据库密码'; FLUSH PRIVILEGES;
2. 验证服务器2的网络连通性
先确认PHP服务器能正常访问服务器2的MySQL端口(默认3306):
- 在PHP服务器上执行以下命令测试:
# 用telnet测试 telnet 10.1.1.2 3306 # 或者用nc工具(如果安装了) nc -zv 10.1.1.2 3306 - 如果连接失败,说明是网络层面的问题:
- 检查服务器2的系统防火墙(比如
ufw)是否开放了3306端口给PHP服务器IP:sudo ufw allow from PHP服务器IP to any port 3306 - 如果是云服务器,还要去控制台检查安全组的入站规则,确保允许PHP服务器IP访问3306端口。
- 检查服务器2的系统防火墙(比如
3. 检查MySQL配置的绑定地址
服务器2的MySQL可能限制了只能从特定IP访问:
- 打开服务器2的MySQL配置文件(通常是
/etc/mysql/my.cnf或/etc/mysql/mysql.conf.d/mysqld.cnf),找到bind-address配置项:- 如果值是
127.0.0.1,说明只允许本地访问,需要改成0.0.0.0(允许所有IP)或者PHP服务器的IP
- 如果值是
- 修改后重启MySQL服务生效:
sudo systemctl restart mysql
4. 打印PHP连接的具体错误信息
你提到的报错只显示了「Command: ...」,可以在PHP代码里添加错误调试,获取更精准的错误提示:
$dbHost = '10.1.1.2'; $dbUser = '你的用户名'; $dbPass = '你的密码'; $dbName = '你的数据库名'; $conn = mysqli_connect($dbHost, $dbUser, $dbPass, $dbName); if (!$conn) { die('连接失败详情: ' . mysqli_connect_error()); }
比如错误是「Access denied」指向权限问题,「Connection refused」指向网络/端口问题,根据提示针对性解决。
内容的提问来源于stack exchange,提问作者Zabar
相关产品推荐
相关产品推荐

