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

SQLSTATE[HY000][2002] PDO连接MySQL Connection refused错误求助

域名连接场景下MySQL连接拒绝报错解决方案

SQLSTATE[HY000] [2002] Connection refused 报错与时区配置、DIR/SITEEMAIL应用地址配置无关联,这两类配置分别负责PHP时间计算、站点路径跳转/邮件发件人标识,不会触发数据库连接层的拒绝逻辑。

现有代码的明确错误

  • PDO连接参数拼接错误:当前代码中数据库名部分写为dbname=AppDatabase".DBNAME,实际运行时会拼接为无效库名AppDatabasedbname,该问题会后续触发库不存在报错,不是本次连接拒绝的诱因,但必须修正。
  • 端口硬编码错误:代码中写死的8889是本地MAMP集成环境的默认MySQL端口,绝大多数远程自建MySQL、云数据库默认监听端口为3306,直接套用本地端口配置是远程连接失败的常见原因。

远程连接场景排查步骤(非localhost本地场景)

按以下顺序逐一排查即可解决问题:

  1. 确认MySQL实际监听端口
    登录数据库所在服务器执行命令netstat -tulpn | grep mysql,查看输出结果中MySQL进程实际监听的端口号,替换代码中port参数的硬编码值。
  2. 修改MySQL绑定地址配置
    找到MySQL配置文件my.cnf(通常在/etc/mysql/路径下),检查bind-address配置项,如果值为127.0.0.1则代表MySQL仅接受本地连接,外部IP/域名发起的连接会被直接拒绝,将该值修改为bind-address = 0.0.0.0后保存,重启MySQL服务生效。
  3. 配置数据库用户远程访问权限
    root用户默认仅允许本地登录,无远程连接权限。登录服务器本地MySQL客户端,执行以下命令授权:
    GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '你实际设置的root密码';
    FLUSH PRIVILEGES;
    
    语句中%代表允许任意IP发起连接,若要做访问限制,可将%替换为你站点服务器的出口IP。
  4. 放行端口访问规则
    检查数据库所在服务器的内部防火墙(firewalld/ufw/iptables),放通MySQL实际监听端口的入方向规则;如果使用云服务器,还需要在云服务商控制台的安全组配置中,同步放通该端口的入方向访问权限,来源IP设置为站点服务器的IP即可。
  5. 修正代码中的PDO连接逻辑
    将原有PDO实例化代码替换为以下内容,端口号替换为第一步查到的实际监听端口:
    $db = new PDO("mysql:host=".DBHOST.";port=3306;dbname=".DBNAME, DBUSER, DBPASS);
    

关于存疑配置项的说明

  • DIR配置项填写你站点实际的根访问地址即可,当前填写的https://domain/test/只要和实际部署的访问路径一致就没有问题,该配置不参与数据库连接逻辑。
  • 时区配置仅影响PHP时间相关函数的返回结果,和数据库连接是否成功无关联。

内容的提问来源于stack exchange,提问作者Duck

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 12:33:07