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)连接:
- 用root用户登录MySQL终端:
mysql -u root -p - 执行授权命令(把
你的用户名和你的密码换成实际内容):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 '你的密码'; - 刷新权限:
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
相关产品推荐
相关产品推荐

