根本原因是客户端不支持caching_sha2_password插件要求的rsa公钥交换或tls加密,导致握手失败;旧版navicat、pymysql等工具因协议栈缺失而无法解析该认证流程。

连不上不是密码错了,是客户端根本“听不懂” caching_sha2_password 插件的握手协议——它要求 RSA 公钥交换或 TLS,而旧版 Navicat、PyMySQL mysql-connector-java ERROR 2059 或 Authentication plugin 'caching_sha2_password' cannot be loaded。
先查清楚到底是谁在用 caching_sha2_password
别猜,登录 MySQL 命令行(比如 mysql -u root -p),执行:
SELECT user, host, plugin FROM mysql.user WHERE user = 'your_user';
重点看三列:
-
user和host组合必须完全匹配你连接字符串里的值——'root'@'localhost'、'root'@'127.0.0.1'、'root'@'%'是三个独立账号 -
plugin列值为caching_sha2_password就坐实问题 - 如果查不到该用户,说明连接字符串里写的账号根本不存在,得先
CREATE USER
ALTER USER 必须带密码重设,否则锁死自己
语法漏掉 BY 'pwd' 是最高频致命错误。以下写法会清空密码,导致账户不可用:
将 LaTeX(.tex)学术论文转换为 Word(.docx),支持可编辑的 OMML 公式、原生 Word 表格、嵌入图形、IEEE 双栏排版及参考文献
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password;
正确操作必须显式重设密码:
- 改本地连接(
localhost):ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'MyPass123!'; - 改本机 IP 连接(Navicat 默认走
127.0.0.1):ALTER USER 'root'@'127.0.0.1' IDENTIFIED WITH mysql_native_password BY 'MyPass123!'; - 改远程访问(
%):ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'MyPass123!'; - 改完立刻执行:
FLUSH PRIVILEGES;,否则内存缓存不更新,新设置无效
my.cnf 的 default_authentication_plugin 只管新用户
在 /etc/my.cnf 的 [mysqld] 段加 default_authentication_plugin=mysql_native_password,重启 MySQL 后只影响后续新建的用户,对已存在的 root、admin 等账号完全无效。
云数据库(如阿里云 RDS)通常禁写配置文件,这条路根本走不通;Docker 场景下加启动参数 --default-authentication-plugin=mysql_native_password 同样不修复存量用户。
真正容易被忽略的是:Navicat 会缓存连接配置,改完服务端后不关掉重开软件、不删旧连接重建,它可能还在用旧握手参数重试——host 写 localhost 却没同步改 'root'@'localhost',或者密码含 @、/ 被 URL 解析吃掉,这些细节比插件切换本身更常导致失败。










