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

MySQLi连接报错(HY000/2002):连接被拒绝,求排查解决方法

解决mysqli_connect(): (HY000/2002): Connection refused 错误

嘿,这个连接拒绝的问题我碰到过好多次了,咱们一步步来排查解决:

1. 先确认MySQL服务是否在运行

这是最常见的原因——MySQL没启动的话肯定连不上:

  • Windows系统:打开「服务」(搜索栏输入“服务”就能找到),找到MySQL相关服务,看状态是不是“正在运行”,如果不是,右键点击「启动」即可。
  • Linux系统:在终端执行 systemctl status mysql(或者 service mysql status,取决于你的发行版),如果显示未运行,就用 systemctl start mysql 启动服务。

2. 检查连接地址和端口的问题

你的代码里用了 localhost:3306,这里可能有两个坑:

  • localhost解析问题:有时候系统会把localhost解析到IPv6地址::1,但MySQL可能只监听了IPv4的127.0.0.1。试试把连接地址换成 127.0.0.1:3306,强制用IPv4连接。
  • 端口不匹配:确认MySQL实际使用的端口是3306。打开MySQL的配置文件(Linux是/etc/my.cnf或/etc/mysql/my.cnf,Windows是my.ini,通常在MySQL安装目录下),找到port配置项,看数值是不是3306,如果改了端口,连接时要对应修改。

3. 验证数据库用户的连接权限

你用的这个数据库用户可能没有权限从本地(localhost/127.0.0.1)连接:

  1. 用root用户登录MySQL终端:mysql -u root -p
  2. 执行授权命令(把你的用户名和你的密码换成实际内容):
    GRANT ALL PRIVILEGES ON id9873966_search.* TO '你的用户名'@'localhost' IDENTIFIED BY '你的密码';
    -- 如果换127.0.0.1连接的话,也要给这个地址授权
    GRANT ALL PRIVILEGES ON id9873966_search.* TO '你的用户名'@'127.0.0.1' IDENTIFIED BY '你的密码';
    
  3. 刷新权限:FLUSH PRIVILEGES;

4. 排查防火墙或安全软件的拦截

防火墙或者安全软件可能会阻止PHP访问3306端口:

  • Windows:临时关闭Windows防火墙,试试能不能连接,如果可以,就给MySQL的3306端口添加一个允许的入站规则。
  • Linux:用ufw allow 3306(如果用ufw防火墙)或者对应的iptables命令开放端口,也可以临时关闭防火墙测试。另外,SELinux也可能拦截,执行setenforce 0临时关闭,确认后再配置SELinux规则。

优化你的代码

另外,建议把数据库名直接放进mysqli_connect的参数里,不用单独调用mysqli_select_db,这样代码更简洁,而且能更早捕获错误:

$con = mysqli_connect('127.0.0.1:3306', '你的用户名', '你的密码', 'id9873966_search');
if (!$con) {
    die('连接失败: ' . mysqli_connect_error());
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 08:07:27