You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

更换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端口。

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 03:49:48