Navicat连不上MySQL 8.0主因是认证插件不兼容:MySQL 8.0默认使用caching_sha2_password,而Navicat 12及更早版本不支持,报错2059;解决方法是执行ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '密码' 并FLUSH PRIVILEGES。

为什么 Navicat 连不上 MySQL 8.0?因为默认用了 caching_sha2_password
MySQL 8.0 默认启用 caching_sha2_password 插件做身份验证,而 Navicat 12 及更早版本不自带这个插件的加载能力,直接报错:Authentication plugin 'caching_sha2_password' cannot be loaded 或 Error No.2058。这不是密码错了,是认证协议不匹配。
执行 ALTER USER 切换认证方式(最常用)
登录 MySQL 命令行(用 root 账户),运行以下语句修改目标用户的认证插件:
- 确认当前用户插件:
SELECT user, host, plugin FROM mysql.user WHERE user = 'root'; - 若 host 是
'localhost',改它:ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '你的新密码'; - 若要支持远程连接(比如 Navicat 从本机连服务器),还得改
'root'@'%':ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '你的新密码'; - 必须刷新权限:
FLUSH PRIVILEGES;
注意:密码必须显式指定,不能只写 IDENTIFIED WITH mysql_native_password 省略 BY —— 否则密码会被清空,导致无法登录。
启动时就设默认插件(适合 Docker 或全新部署)
如果是在 Docker 中跑 MySQL 8.0,或者能控制 mysqld 启动参数,可以在配置里一劳永逸地避免这个问题:
构建并排查Microsoft Word邮件合并及DOCX模板工作流,使用合并域、内容控件、文档属性、重复区块、数据等
- Docker Compose 中加 environment:
command: --default-authentication-plugin=mysql_native_password - 或在
my.cnf的[mysqld]段落加:default_authentication_plugin=mysql_native_password - 改完需重启 MySQL 服务;但已有用户不会自动更新 plugin 字段,仍需手动
ALTER USER
这种配置只影响后续新建的用户,对已存在的用户无作用 —— 很多人漏掉这句,以为改了配置就万事大吉。
Navicat 连接后还是失败?检查这几个点
即使改了认证方式,仍连不上,大概率卡在这几个细节上:
- Navicat 缓存了旧连接配置,关掉重开,或删掉该连接重新建
- 用户 host 不匹配:比如你改了
'root'@'localhost',但 Navicat 连的是127.0.0.1—— 这俩在 MySQL 里是不同 host,得单独改'root'@'127.0.0.1' - 密码含特殊字符(如 @ / \)没被 Navicat 正确解析,换一个纯字母数字密码快速验证
- MySQL 服务没监听外部端口(尤其 Docker 默认只 listen localhost),检查
bind-address和防火墙
最易忽略的是 host 匹配粒度 —— localhost、127.0.0.1、% 三者互不等价,必须按实际连接地址逐个处理。


















