sqlstate[hy000] [2002] connection refused或no such file or directory本质是tp5.1配置的localhost强制走unix socket,而宝塔mysql默认绑定127.0.0.1:3306 tcp接口,导致路径不匹配;需将database.php中hostname改为127.0.0.1,或显式指定unix_socket路径并验证服务状态、端口监听及权限。

TP5.1在宝塔面板中报错 SQLSTATE[HY000] [2002] Connection refused 或 No such file or directory,本质是PHP应用无法建立到MySQL的TCP连接或Unix socket连接。这不是TP5.1本身的问题,而是环境配置与连接方式不匹配导致的典型故障。
检查数据库监听地址是否允许远程连接
ThinkPHP 5.1 默认使用 localhost 作为数据库 host,但在Linux系统中,localhost 会强制走 Unix socket(如 /tmp/mysql.sock),而宝塔默认配置的 MySQL 是绑定在 127.0.0.1:3306 的 TCP 接口上——两者路径不同,就会触发“2002 No such file or directory”错误。
- 打开宝塔面板 → 数据库 → 点击对应数据库右侧的「管理」→ 进入 phpMyAdmin
- 确认 MySQL 配置文件
/www/server/mysql/my.cnf中有:[mysqld]<br>bind-address = 127.0.0.1
(或0.0.0.0,视安全需求) - TP5.1 的数据库配置(
database.php)中,把'hostname' => 'localhost'改为'hostname' => '127.0.0.1'
验证MySQL服务状态与端口连通性
即使面板显示“运行中”,也可能因异常退出、资源不足或日志损坏导致实际不可用。
- SSH登录服务器,执行:
systemctl status mysqld或/etc/init.d/mysqld status,确认状态为 active (running) - 检查3306端口是否被监听:
netstat -tuln | grep :3306—— 应看到127.0.0.1:3306或*:3306 - 本地测试连接:
mysql -u root -p -h 127.0.0.1,能登录说明服务和TCP层正常
排查socket路径不一致或权限问题
若坚持用 localhost,需确保 socket 文件存在且路径匹配。
- 查看MySQL当前使用的 socket:
mysql -uroot -p -e "SHOW VARIABLES LIKE 'socket';" - 常见路径为
/tmp/mysql.sock或/var/lib/mysql/mysql.sock - 在TP5.1配置中显式指定:
'hostname' => 'localhost',<br>'unix_socket' => '/tmp/mysql.sock'
- 检查该 socket 文件是否存在、属主是否为
mysql:mysql、权限是否为srwxrwxrwx
检查防火墙与SELinux干扰
虽然本地连接通常不受影响,但部分宝塔安装后启用了 firewalld 或 SELinux,可能拦截本地 loopback 流量(罕见但存在)。
- 临时关闭 firewalld 测试:
systemctl stop firewalld - 检查 SELinux 状态:
sestatus,若为 enforcing,可临时设为 permissive:setenforce 0 - 如恢复后正常,则需针对性放行:
ausearch -m avc -ts recent | audit2why查具体拒绝原因











