MySQL连接被拒绝主因是权限或网络策略问题,需检查用户IP权限、密码正确性、bind-address配置,并区分5.7与8.0+授权语法,注意caching_sha2_password兼容性及防火墙端口放行。

MySQL 连接被拒绝的常见原因定位
宝塔面板提示“MySQL 连接拒绝”,大概率不是 MySQL 服务没启动,而是权限或网络策略拦住了连接请求。先确认 mysqld 进程在运行(ps aux | grep mysqld),再重点排查三件事:用户是否允许从当前 IP 登录、密码是否正确、是否绑定了 127.0.0.1 导致远程/本地 socket 连接失败。
重置 root 用户权限时必须执行的关键 SQL
直接改 mysql.user 表风险高,推荐用标准授权语句重置。注意:5.7+ 和 8.0+ 的语法有差异,别混用。
- MySQL 5.7 及更早版本:
GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY 'your_password' WITH GRANT OPTION; - MySQL 8.0+ 必须分两步:
CREATE USER 'root'@'localhost' IDENTIFIED BY 'your_password';,再GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION; - 如果需从宝塔面板(通常是本机 PHP 进程)连接,还要加一条:
GRANT ALL PRIVILEGES ON *.* TO 'root'@'127.0.0.1' IDENTIFIED BY 'your_password'; - 执行完必须
FLUSH PRIVILEGES;,否则不生效
宝塔里“重置数据库密码”按钮为什么有时无效
这个按钮只改了宝塔后台记录的密码和 mysql.user 表里的认证字段,但不会自动补全缺失的 host 条目,也不会处理插件式认证(比如 caching_sha2_password 在 8.0 默认启用,而旧版 PHP 扩展不支持)。
- 检查实际生效的用户记录:
SELECT User, Host, plugin FROM mysql.user WHERE User = 'root'; - 若
plugin是caching_sha2_password且你用的是 PHP 7.2 或更低版本,得手动切回:ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your_password'; - 宝塔修改密码后,记得同步更新
/www/server/php/{version}/etc/php.ini里mysqli.default_pw(如有设置)和网站配置中的数据库密码
连接测试前务必确认的三个配置点
很多问题卡在细节上,不是权限没给,而是连基础通路都没通。
- MySQL 配置文件(
/etc/my.cnf或/www/server/mysql/etc/my.cnf)中bind-address是否为127.0.0.1(仅本地)或0.0.0.0(全网,不推荐)——宝塔默认是127.0.0.1,这本身没问题,但意味着你不能用外网 IP 连 - Linux 防火墙(
firewalld或ufw)是否放行了3306端口?宝塔界面里“安全”页的防火墙规则只管面板端口,不管 MySQL - 宝塔新建站点时填的数据库主机名是
localhost还是127.0.0.1?某些环境下这两个值触发的 socket / TCP 连接路径不同,localhost会优先走 socket 文件(/tmp/mysql.sock),而该文件路径可能和 MySQL 配置不一致
宝塔的数据库管理逻辑封装较深,出问题时别只盯着“重置密码”按钮,真正关键的是查清当前登录用户对应的 Host 值、认证方式、以及连接发起方的实际网络路径。

















