mysql 8.0 默认认证插件 caching_sha2_password 导致旧版 navicat 报错 error 2059,需通过 select 查询确认用户 plugin,再用带 host 的 alter user 切换为 mysql_native_password 并执行 flush privileges。

MySQL 8.0 默认用 caching_sha2_password 认证插件,而旧版 Navicat(如 12 或 15 早期版)压根不识别它,直接报错 ERROR 2059 或 Plugin caching_sha2_password could not be loaded —— 不是密码错,是协议根本对不上。
怎么确认当前用户用了哪个认证插件
连上 MySQL 命令行后执行:
SELECT user, host, plugin FROM mysql.user WHERE user = 'root';
如果 plugin 列显示 caching_sha2_password,就坐实了问题根源。注意:别只查 'root'@'localhost',Navicat 实际连接的可能是 'root'@'127.0.0.1' 或 'root'@'%',得按实际 host 查。
ALTER USER 必须带 host 和密码,缺一不可
常见错误写法:ALTER USER 'root' IDENTIFIED WITH mysql_native_password BY 'pwd' —— 漏了 @'host',MySQL 会默认匹配 'root'@'%',结果改错了用户。
正确操作(按需选一行):
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your_pass' PASSWORD EXPIRE NEVER;ALTER USER 'root'@'127.0.0.1' IDENTIFIED WITH mysql_native_password BY 'your_pass' PASSWORD EXPIRE NEVER;ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'your_pass' PASSWORD EXPIRE NEVER;
必须同时指定 host、插件、密码、永不过期;只改插件或只重设密码都不生效。
FLUSH PRIVILEGES 是硬性要求,不是可选项
MySQL 的权限状态有内存缓存。ALTER USER 只写磁盘,不刷新运行时状态。不执行 FLUSH PRIVILEGES,Navicat 还是拿旧插件去握手,错误照旧。
执行后没输出就是成功;出现 Query OK 表示已加载。不需要重启 MySQL 服务。
真正容易被忽略的是 host 匹配:Navicat 填 localhost 时,Windows 下可能走命名管道而非 TCP,导致实际连接的是 'root'@'127.0.0.1' —— 而你只改了 'root'@'localhost',自然无效。最稳妥的做法是把这三个 host 都处理一遍。











