Navicat连接MySQL 8.0+报2059错误的根源是认证插件不兼容:MySQL 8.0默认使用caching_sha2_password,而旧版Navicat仅支持mysql_native_password;解决方法是登录MySQL后执行SELECT user,host,plugin FROM mysql.user WHERE user='root'确认插件类型,再用ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '密码'修改(须指定host和显式密码),最后FLUSH PRIVILEGES生效。
navicat 连不上 mysql 8.0+,报 authentication plugin 'caching_sha2_password' cannot be loaded 或错误号 2059,不是密码错了,也不是网络不通——是客户端不认服务器的认证协议。最稳妥、最快见效的解法是改用户认证方式,而不是调配置或等升级。
怎么确认当前用户用的是哪个认证插件?
先登录 MySQL 命令行(用 root 或有权限的账号),执行:
SELECT user, host, plugin FROM mysql.user WHERE user = 'root';
如果看到 plugin 列值是 caching_sha2_password,就坐实了问题根源。注意:不同 host(比如 'localhost' 和 '%')是独立的用户记录,必须分别查、分别改。
ALTER USER 必须带密码,且不能省略 BY
这是最容易翻车的操作点:只写 IDENTIFIED WITH mysql_native_password 不加 BY 'xxx',会导致密码被清空,之后连命令行都登不进去。
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your_password';-
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'your_password';(如需远程连接) - 改完立刻执行
FLUSH PRIVILEGES;,否则不生效
如果你不确定原密码,或者已无法登录,就得进安全模式重置——但那是另一回事,当前场景下,密码必须显式提供。
my.cnf 里加 default_authentication_plugin 没用?
加了 default_authentication_plugin=mysql_native_password 并重启 MySQL,只影响后续新建的用户,对已有用户完全无效。很多人改完发现 Navicat 还是连不上,就是卡在这儿。
- 该配置在 Docker 启动时更实用:
command: --default-authentication-plugin=mysql_native_password - 线上环境不建议长期用
mysql_native_password,它不支持密码过期、双因子等安全策略 - 若坚持用新插件,Navicat 需 ≥ v16.0.15,且确保 OpenSSL 库可用(Windows 用户常缺这个)
真正要留心的是 host 匹配和密码重置的耦合关系——'root'@'localhost' 和 'root'@'%' 是两个账户,改错一个,Navicat 从本机连可能通,但从局域网其他机器连就失败;而一旦漏掉 BY 子句,连本地命令行都会被锁在外面。


















