ERROR 2059本质是认证插件不匹配,因MySQL 8.0默认使用caching_sha2_password,而Navicat 12及更早版本不支持该插件;需将root@localhost、root@127.0.0.1、root@::1均改为mysql_native_password并刷新权限,且Navicat连接时必须填127.0.0.1而非localhost,或全局配置default_authentication_plugin=mysql_native_password并重启服务。

ERROR 2059 的本质是认证插件不匹配,不是权限配置错误
报错 ERROR 2059 或提示 Authentication plugin 'caching_sha2_password' cannot be loaded,根本原因不是用户没权限、密码输错或 host 不对,而是 Navicat(尤其是 12 及更早版本)根本不认识 MySQL 8.0 默认启用的 caching_sha2_password 插件。它在 TCP 握手阶段就失败了,连“验证用户名密码”这一步都还没走到。
MySQL 8.0 将 default_authentication_plugin 设为 caching_sha2_password,这是安全升级,不是 bug。但 Navicat Premium 12 的底层驱动(libmysqlclient)多数未内置对该插件的支持——就像用收音机听不到蓝牙音频流,不是音量问题,是协议压根不兼容。
为什么只改 'root'@'localhost' 还是连不上?
Navicat 在 Windows 上填 localhost 时,MySQL 实际可能匹配到 'root'@'127.0.0.1'(TCP)或 'root'@'::1'(IPv6),而这两条记录往往不存在,或 plugin 仍是 caching_sha2_password。
- 先查真实用户:执行
SELECT user, host, plugin FROM mysql.user WHERE user = 'root'; - 如果只看到
root+localhost,说明127.0.0.1和::1是空缺的 - 必须显式创建并修改:
CREATE USER 'root'@'127.0.0.1' IDENTIFIED WITH mysql_native_password BY '你的密码';ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '你的密码';ALTER USER 'root'@'::1' IDENTIFIED WITH mysql_native_password BY '你的密码'; - 漏掉
FLUSH PRIVILEGES;,所有修改都不会生效
Navicat 连接设置里必须填 127.0.0.1,不能填 localhost
Windows 下 localhost 会优先走命名管道或共享内存(MySQL 默认禁用),导致连接绕过 TCP,无法命中你刚配好的 'root'@'127.0.0.1' 记录。
解析 MySQL 8.0 的 DDL 脚本,并将表结构导出为 Excel 格式。适用于用户需将 MySQL 的 `CREATE TABLE` 语句转换为结构化的 Excel 文件场景,导出内容包含字段名、数据类型、长度及精度等信息。支持多张表的批量处理,每张表对应 Excel 中的一个独立工作表。适用于数据库文档编写、数据字典生成及模式分析等任务。
- Navicat 新建连接 → “主机名或 IP 地址”栏输入:
127.0.0.1(不是localhost) - 端口确认是 MySQL 实际监听值(Docker/XAMPP 常为
3307,不是默认3306) - 密码大小写敏感,且不能留空;若含特殊字符,确保 Navicat 字段未被自动截断
长期部署别只靠单条 ALTER USER
每次新建用户(比如用 phpMyAdmin 或脚本 CREATE USER),还是会继承 caching_sha2_password,问题反复出现。
一劳永逸的方法是改全局默认插件:
- Linux/macOS:编辑
/etc/my.cnf,在[mysqld]下加一行:default_authentication_plugin=mysql_native_password - Windows:修改
my.ini,同样位置添加该行 - Docker:把自定义配置挂载进容器的
/etc/mysql/conf.d/目录 - 改完必须重启 MySQL 服务,否则不生效
注意:default_authentication_plugin 只影响新创建的用户,已有用户的 plugin 不变,仍需手动修正。










