MySQL服务未启动或PHP与数据库通信链路断裂是PHP 7.4安装宝塔后连接失败的主因,需依次验证服务状态(systemctl status)、bind-address配置、PHP扩展启用情况、用户远程权限及socket路径匹配性。

PHP 7.4安装宝塔面板后数据库连接失败,说明MySQL服务未就绪或PHP与数据库通信链路存在断裂,常见于服务未启动、socket路径错配、用户权限限制或PHP扩展缺失,需逐层验证。
确认MySQL服务真实运行状态
宝塔面板首页显示“MySQL运行中”可能是缓存状态,不代表进程健康。必须用系统命令验证:
执行 systemctl status mysqld(CentOS/Rocky)或 systemctl status mysql(Ubuntu/Debian),观察输出中是否含 【active (running)】。若显示 inactive (dead) 或 failed,说明服务根本未启动。
刚装完宝塔未重启服务器?部分版本MySQL不会自动开机自启,立即执行:systemctl enable mysqld && systemctl start mysqld。
立即学习“PHP免费学习笔记(深入)”;
若提示 Unit mysqld.service not found,说明MySQL未成功安装——去 /www/wwwlogs/install.log 搜 mysql 关键字,看安装卡在哪一步。
检查MySQL是否监听正确地址与端口
“Connection refused”本质是请求压根没抵达MySQL进程,90%以上源于监听配置错误。
执行 ss -tlnp | grep :3306,若只看到 127.0.0.1:3306,证明MySQL拒绝所有非本机IP连接。
编辑宝塔专属配置文件:/www/server/mysql/etc/my.cnf,定位 [mysqld] 区块,将 bind-address = 127.0.0.1 改为 bind-address = 0.0.0.0,或直接注释掉该行。
同时检查是否存在 skip-networking = ON —— 若有,【必须删除或加#注释】,否则TCP连接永久关闭。
改完立即执行 systemctl restart mysqld(CentOS)或 systemctl restart mysql(Ubuntu),再运行 ss -tlnp | grep :3306,确认输出含 *:3306 或 0.0.0.0:3306。
验证PHP 7.4能否真正连上MySQL
方法一:用PHP命令行直连测试
执行 /www/server/php/74/bin/php -r "var_dump(new mysqli('127.0.0.1', 'root', '你的root密码', '', 3306));"。若报 Connection refused,说明MySQL未监听TCP;若报 Access denied,说明密码错或用户权限不足。
方法二:检查PHP是否加载MySQLi扩展
执行 /www/server/php/74/bin/php -m | grep mysqli,无输出即未启用。进宝塔 → 软件商店 → PHP 7.4 → 设置 → 安装扩展 → 勾选 mysqli 和 pdo_mysql → 提交。
注意:扩展安装后必须重启PHP服务,否则不生效。
修复数据库用户远程访问权限
第一步:登录MySQL控制台
mysql -uroot -p,输入root密码进入。
第二步:查看当前用户host限制
执行 SELECT host, user FROM mysql.user WHERE user = 'root';,若结果中host列只有 localhost,则该用户无法从任何IP(包括本机用127.0.0.1)连接。
第三步:授权root允许任意IP连接(仅限测试环境)
执行 CREATE USER 'root'@'%' IDENTIFIED BY '你当前的root密码'; → GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION; → FLUSH PRIVILEGES;。
第四步:删除原localhost限制用户(避免冲突)
执行 DROP USER 'root'@'localhost';,再 FLUSH PRIVILEGES;。
生产环境请勿用 @'%',应指定具体IP段如 @'192.168.1.0/24'。
排查Unix socket路径错位问题
宝塔面板自身和PHP脚本默认走Unix socket而非TCP,但MySQL可能未生成或路径不匹配。
检查配置文件 /www/server/mysql/etc/my.cnf 中是否有 socket=/www/server/data/mysql.sock 这一行。
执行 ls -l /www/server/data/mysql.sock,若提示 No such file or directory,说明MySQL启动时未创建socket文件。
此时不要手动touch,先停服务:systemctl stop mysqld → 确保 /www/server/data 目录属主为 mysql:mysql → 再启动:systemctl start mysqld。



















