PHP本地连接被拒绝(HY000/2002)问题求助
解决MySQL连接被拒绝(HY000/2002)的问题
首先先明确你遇到的错误核心:
[30-Apr-2018 17:05:11 UTC] PHP Warning: mysqli::mysqli(): (HY000/2002): Connection refused in /home/nicktric/public_html/index.php on line 12
这个错误本质是PHP脚本没法和MySQL服务器建立网络连接,我整理了几个最常见的排查方向,按顺序试基本能解决问题:
1. 先确认MySQL服务器是否在运行
这是最容易忽略的点——如果MySQL服务没启动,肯定连不上:
- 如果你用Linux服务器,在终端执行:
如果显示systemctl status mysqlinactive,就启动它:systemctl start mysql - Windows的话,打开「服务」面板,找到MySQL服务,看状态是不是「正在运行」,不是就右键启动。
2. 检查连接参数是否正确
你的代码里的连接配置大概率有问题:
- 服务器地址:如果是本地MySQL,优先试试
127.0.0.1代替localhost——因为localhost默认走Unix socket连接,而127.0.0.1走TCP/IP,有时候socket配置不对就会触发拒绝连接。 - 端口号:MySQL默认端口是3306,如果你的服务器改了端口,必须在连接时指定,比如:
$conn = new mysqli($servername, $username, $password, $dbname, 3307); // 3307是自定义端口 - 账号权限:确保你用的MySQL账号允许从当前服务器连接,比如本地连接需要
user@localhost或user@127.0.0.1的权限,远程连接需要user@你的服务器IP权限。
3. 排查防火墙/安全组
如果是远程MySQL服务器,要确认服务器的防火墙(比如Linux的ufw、iptables)允许3306端口的入站请求;如果是云服务器,还要检查安全组规则有没有放开3306端口。
4. 检查MySQL的绑定地址配置
MySQL默认可能只绑定了本地地址,导致外部(甚至特殊环境下的本地)连不上:
- 打开MySQL的配置文件(Linux是
/etc/mysql/my.cnf或/etc/mysql/mysql.conf.d/mysqld.cnf,Windows是my.ini),找到bind-address这一行:- 如果是
bind-address = 127.0.0.1,说明只允许本地连接,要是需要远程连接可以改成bind-address = 0.0.0.0(注意安全,最好配合账号权限限制) - 修改后重启MySQL服务生效。
- 如果是
5. 解决Socket路径不匹配问题(仅限localhost连接)
如果坚持用localhost连接,可能PHP的默认socket路径和MySQL的不一样:
- 先在PHP里运行
phpinfo(),找到mysqli.default_socket的值,比如/var/run/mysqld/mysqld.sock - 然后在连接时指定这个socket路径:
$conn = new mysqli($servername, $username, $password, $dbname, null, '/var/run/mysqld/mysqld.sock');
修正后的示例代码
<!DOCTYPE html> <html> <body> <?php $servername = "127.0.0.1"; // 改用IP地址避免socket问题 $username = "你的MySQL用户名"; $password = "你的MySQL密码"; $dbname = "你的数据库名"; // 创建连接 $conn = new mysqli($servername, $username, $password, $dbname); // 检查连接状态 if ($conn->connect_error) { die("连接失败: " . $conn->connect_error); } echo "数据库连接成功!"; ?> </body> </html>
内容的提问来源于stack exchange,提问作者Nick
相关产品推荐
相关产品推荐

