MySQL 8.0 连不上八成是 caching_sha2_password 插件不被客户端支持,需先查用户 plugin 值,再用 ALTER USER 'user'@'host' IDENTIFIED WITH mysql_native_password BY 'pwd' 切换并 FLUSH PRIVILEGES。

MySQL 8.0 连不上,八成是 caching_sha2_password 插件不被客户端认——不是密码错,是握手协议不匹配。
查当前用户的认证插件是不是罪魁祸首
登录 MySQL 命令行(用 root 或有权限的账号),执行:
SELECT user, host, plugin FROM mysql.user WHERE user = 'your_username';
重点看 plugin 列的值。常见情况:
- 如果是
caching_sha2_password,而你用的是旧版MySql.Data(v8.0.12 以前)、PyMySQL < 1.0、Navicat 12或 PHPmysqli7.2–7.4,基本就锁定问题了 -
host必须完全匹配:'root@'localhost'、'root@'127.0.0.1'、'root@'%' 是三个独立账户,改错一个就白忙 - 云数据库(如阿里云 RDS)通常禁止修改配置文件,
ALTER USER是唯一可行路径
用 ALTER USER 切换插件(最常用、见效最快)
执行前务必确认目标用户的 host 和密码,否则可能锁死自己:
- 改本地连接:
ALTER USER 'your_username'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your_password'; - 改远程连接:
ALTER USER 'your_username'@'%' IDENTIFIED WITH mysql_native_password BY 'your_password'; - 如果客户端连的是
127.0.0.1(Navicat 默认行为),还得单独加一句:ALTER USER 'your_username'@'127.0.0.1' IDENTIFIED WITH mysql_native_password BY 'your_password'; - 执行完必须跟:
FLUSH PRIVILEGES;,部分 MySQL 8.0 版本(尤其云 RDS)不执行这句就不生效 - 不能只写
IDENTIFIED WITH mysql_native_password而省略BY 'xxx',否则密码会被清空
遇到 ERROR 1524: Plugin 'mysql_native_password' is not loaded 怎么办
这不是操作错了,是插件根本没加载——常见于 MySQL 8.4+ 或精简安装包:
- 先查插件目录:
SHOW VARIABLES LIKE 'plugin_dir';,再用系统命令确认路径下是否存在mysql_native_password.so(Linux/macOS)或.dll(Windows) - 若文件缺失,别手动拷贝;重装完整服务端包(如 Ubuntu 上运行
sudo apt install mysql-server) - 若路径存在但权限不足(尤其 SELinux 环境),需确保
mysql用户对目录有r-x权限,并设置正确上下文:mysqld_plugin_t - MySQL 8.4+ 中
default_authentication_plugin已弃用,应改用:authentication_policy=mysql_native_password
客户端连上后还是失败?这些细节比插件切换更常翻车
改完服务端,别急着点“测试连接”——先检查:
- Navicat / DBeaver 等工具会缓存旧连接参数,必须关闭软件重开,或删除旧连接新建
- 密码含
@、/、\等字符时,URL 解析可能出错,临时换纯字母数字密码验证 - 用
mysql -u your_user -p -h 127.0.0.1命令行直连,能排除 GUI 工具干扰 - 某些 Docker 镜像默认禁用
mysql_native_password,光改配置不重启服务无效,必须systemctl restart mysqld或重建容器
真正麻烦的从来不是改哪条 SQL,而是 host 对不对、插件载没载、客户端缓没缓——三者漏一,前面全白干。


















