报错本质是客户端不支持caching_sha2_password插件,最稳妥解法是用ALTER USER将用户认证方式切回mysql_native_password并FLUSH PRIVILEGES;改my.cnf只影响新用户,旧用户必须显式重置,且需重启MySQL服务生效。

直接结论:报错本质是客户端不支持 caching_sha2_password 插件,最稳妥的解法是把用户认证方式切回 mysql_native_password,不是改配置文件,也不是升级驱动——先救连通性。
怎么确认真是 caching_sha2_password 在报错
别猜,进主库执行这两条命令:
SHOW VARIABLES LIKE 'default_authentication_plugin';SELECT user, host, plugin FROM mysql.user WHERE user = 'your_repl_user' OR user = 'root';
如果 plugin 列显示 caching_sha2_password,且你用的是旧版 Navicat、PHP 5.x、某些 Docker 镜像或宝塔内置工具,那基本就是它了。常见错误信息包括:Authentication plugin 'caching_sha2_password' cannot be loaded 或 Authentication requires secure connection。
ALTER USER 是首选操作,不是改 my.cnf
改配置文件 my.cnf 中的 default_authentication_plugin=mysql_native_password 只影响新建用户,对已有复制用户或 root 用户无效。必须显式重置用户插件:
- 登录 MySQL(用有 SUPER 权限的账号,如 root):
mysql -u root -p - 切换到系统库:
USE mysql; - 执行(替换
'repl_user'和'%'为你的实际用户名和 host):ALTER USER 'repl_user'@'%' IDENTIFIED WITH mysql_native_password BY 'your_actual_password'; - 立即生效:
FLUSH PRIVILEGES;
注意:密码必须重输,哪怕原密码没变;@'localhost' 和 @'%' 是两个独立用户,要分别处理。
宝塔面板用户别在 phpMyAdmin 里瞎点“修改”按钮
宝塔的 phpMyAdmin 界面常把 plugin 字段设为只读,直接编辑表会失败。务必用 SQL 标签页手动执行 ALTER USER 命令。另外,改完后必须在宝塔「软件商店」里重启 MySQL 服务,否则部分连接池可能缓存旧认证状态,导致从库仍报 IO 线程失败。
为什么不用强制启用 RSA 或 SSL 来硬扛 caching_sha2_password
可以,但代价高:
- 主库得生成并分发 RSA 公钥,从库客户端得支持
get_server_public_key=1或require_secure_transport=ON - 很多嵌入式环境、老旧中间件、甚至某些云数据库代理不转发公钥请求
- 一旦网络中间有 NAT 或代理,额外的握手往返极易超时,表现为
Lost connection during authentication
除非你明确需要 FIPS 合规或审计强要求,否则切回 mysql_native_password 是更可控的选择——它不是“不安全”,而是把加密责任交给 TLS 层,而你本就该开 TLS。
真正容易被忽略的是:改完插件后,所有使用该用户的客户端(包括监控脚本、备份任务、应用连接池)都得确保密码字段没被缓存或硬编码成旧哈希值;有些 ORM 会把密码哈希存在本地配置里,得手动清空重连。











