error 2059是客户端不支持caching_sha2_password插件所致,发生在tcp连接后的认证阶段,需查mysql.user表确认对应'user'@'host'的plugin值,并用alter user指定完整host和密码重设后执行flush privileges。

不是插件本身有问题,是客户端根本没准备好跟它握手——报错发生在 TCP 连接建立后的认证阶段,还没走到密码校验那步。
ERROR 2059 或 “Authentication plugin 'caching_sha2_password' cannot be loaded” 是什么信号
这类错误说明客户端驱动(比如 PyMySQL、旧版 mysql-connector-java、Navicat 15 以下、DBeaver 默认 JDBC 配置)压根不识别 caching_sha2_password 这个插件名。它在初始化连接时尝试加载对应认证模块失败,直接抛异常中断,连密码都还没发出去。
- 不是密码输错了,也不是权限不够
- 不是网络不通,TCP 层已连上(否则会报
Connection refused或超时) - 常见触发场景:本地开发用 Navicat 12/14、Spring Boot 项目配了老版本
mysql-connector-java:5.1.x、Python 脚本用PyMySQL未指定auth_plugin
为什么查 plugin 字段比看 default_authentication_plugin 更关键
MySQL 8.0 的 caching_sha2_password 是按用户粒度生效的,不是全局开关。你改了 [mysqld] 里的 default_authentication_plugin,只影响之后新创建的用户,对已存在的 root、repl_user、your_app_user 完全无效。
- 必须执行:
SELECT user, host, plugin FROM mysql.user WHERE user = 'your_user'; -
'root'@'localhost'、'root'@'127.0.0.1'、'root'@'%'是三个独立账号,Navicat 默认走127.0.0.1,只改localhost就白忙 - 云数据库(如阿里云 RDS)通常禁止修改配置文件,这条路直接堵死
ALTER USER 必须带密码重设,否则等于锁死自己
这是最常踩的坑:ALTER USER 'user'@'host' IDENTIFIED WITH mysql_native_password; 看似只换插件,实际会清空该账号密码字段,导致下次谁都连不上。
- 正确写法:
ALTER USER 'user'@'host' IDENTIFIED WITH mysql_native_password BY 'your_actual_password'; - 改完立刻执行:
FLUSH PRIVILEGES;,否则不生效 - DBeaver、Navicat 会缓存连接参数,服务端改完必须重启客户端或删掉旧连接重建
- 宝塔、phpEnv 等面板环境,改完还得手动重启 MySQL 服务,否则从库 IO 线程可能卡住不动
真正麻烦的点在于:同一个用户名 + 不同 host 的组合要逐个查、逐个改、逐个 flush,漏一个就前功尽弃;而很多工具 UI(比如 phpMyAdmin)根本不允许编辑 plugin 字段,只能靠手写 SQL —— 这就是为什么光看报错信息、不进命令行查真实 plugin 值,永远解不了。











