MySQL未启动或配置错误导致PHP连接失败,需依次检查服务状态、连接参数(host必须为127.0.0.1)、用户权限(含information_schema)、防火墙规则及认证插件兼容性。

宝塔面板里 MySQL 服务没启动,php 连不上怎么办
先看最常见死因:MySQL 根本没运行。宝塔面板有时会因磁盘满、配置错误或意外重启导致 MySQL 停止,但面板首页“数据库”模块仍显示列表,容易误判为“可用”。
- 登录宝塔 → 左侧菜单点「软件商店」→ 找到已安装的
MySQL(如 5.7 或 8.0)→ 点「设置」→ 看右上角状态是否为「正在运行」;不是就点「启动」 - 若启动失败,点「日志」看报错,90% 是
/www/server/data权限异常或my.cnf配置语法错误(比如多了一个逗号、路径写错) - 别只信「数据库」列表里的库名存在,那只是记录,不等于 MySQL 进程活着
php 连宝塔 MySQL 的连接参数怎么填才对
本地 PHP 脚本连宝塔 MySQL,关键不是“能不能连”,而是“连的是哪个实例、用的哪个用户、走的哪条路”。宝塔默认 MySQL 绑定 127.0.0.1,不是 localhost,这点极易踩坑。
-
host必须填127.0.0.1(不能填localhost,否则 PHP 会尝试 Unix socket,而宝塔默认禁用 socket 文件) -
port默认是3306,但如果改过 MySQL 端口(比如在「MySQL 设置」→「端口」里调成3307),PHP 里必须显式指定port=3307 -
username和password不是宝塔后台登录账号,而是「数据库」页面里你创建的那个用户(比如myapp_user),且该用户必须授权了对应数据库 +127.0.0.1主机 - 测试连通性最简单方式:
php -r "var_dump(new mysqli('127.0.0.1', 'myapp_user', 'xxx', 'myapp_db', 3306));"
宝塔 MySQL 用户权限不足,mysqli_connect() 报 Access denied
即使账号密码没错,也常因权限粒度太细连不上——宝塔建库时默认只给当前库权限,但某些 PHP 框架(如 Laravel)初始化时会先查 information_schema 或执行 SET NAMES utf8mb4,触发权限拒绝。
- 进宝塔 → 「数据库」→ 找到你的用户 → 点「权限设置」→ 把「权限范围」从「指定数据库」改成「所有数据库」(开发环境可接受;生产环境建议手动补
SELECToninformation_schema.*) - 如果用的是 MySQL 8.0+,确认用户认证插件是
mysql_native_password,不是默认的caching_sha2_password(PHP 7.4 以下原生不支持) - 执行
ALTER USER 'myapp_user'@'127.0.0.1' IDENTIFIED WITH mysql_native_password BY 'xxx'; FLUSH PRIVILEGES;再试
PHP 脚本在宝塔网站根目录下,但连 MySQL 一直超时
超时(Connection timed out)不是网络问题,大概率是 SELinux 或防火墙拦了本地回环流量——尤其 CentOS 7/8 宝塔环境默认开启 firewalld,且规则可能误封 127.0.0.1:3306。
立即学习“PHP免费学习笔记(深入)”;
- 先关 firewalld 测试:
systemctl stop firewalld,再跑 PHP 连接脚本;如果通了,说明是防火墙策略问题 - 不建议永久关防火墙,正确做法是放行本地 MySQL:
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="127.0.0.1" port port="3306" protocol="tcp" accept',然后firewall-cmd --reload - 极少数情况是宝塔 MySQL 配置了
skip-networking = 1(禁用 TCP/IP),需进/www/server/mysql/my.cnf删除该行并重启 MySQL











