2059错误本质是认证插件不匹配,即Navicat旧版不支持MySQL 8.0默认的caching_sha2_password协议,需通过ALTER USER指定完整host、添加PASSWORD EXPIRE NEVER并执行FLUSH PRIVILEGES方可生效。
2059错误本质是认证插件不匹配
不是权限不足,也不是密码错了,而是 navicat(尤其旧版)根本“听不懂” mysql 8.0 默认的 caching_sha2_password 握手协议。服务器说“我用 sha-256 加密”,客户端还在等 sha-1,直接断连,报错 2059。改权限没用,必须改认证方式本身。
ALTER USER 必须带完整 host 和 PASSWORD EXPIRE NEVER
只写 ALTER USER 'root' IDENTIFIED WITH mysql_native_password BY 'xxx'; 是常见失败原因——MySQL 把 'root'@'localhost'、'root'@'127.0.0.1'、'root'@'%' 当作三个独立用户。Navicat 连接时填的是 IP 还是 localhost,就得改对应那条记录。
- 先查清楚实际用的是哪个:
SELECT user, host, plugin FROM mysql.user WHERE user = 'root'; - 如果 Navicat 填的是
127.0.0.1,就得改'root'@'127.0.0.1',不是'root'@'localhost' - 必须加
PASSWORD EXPIRE NEVER:MySQL 8.0 默认启用密码过期,否则下次连接可能卡在1862错误 - 正确写法:
ALTER USER 'root'@'127.0.0.1' IDENTIFIED WITH mysql_native_password BY 'your_pass' PASSWORD EXPIRE NEVER;
FLUSH PRIVILEGES 不是可选,是硬性步骤
MySQL 8.0 的权限缓存不会自动刷新。ALTER USER 只改了磁盘表,但服务端握手时仍从内存缓存读旧插件信息。不执行 FLUSH PRIVILEGES,改了也白改。
- 执行完
ALTER USER后,立刻跟一句:FLUSH PRIVILEGES; - 验证是否生效:
SELECT plugin FROM mysql.user WHERE user = 'root' AND host = '127.0.0.1';—— 结果必须是mysql_native_password - 如果仍是
caching_sha2_password,说明前面 host 写错或没刷缓存
别忽略 host 和密码策略这两个隐藏坑
连上之后发现建库失败、查不到表?那不是 2059 的问题,是权限本身没给够。但 2059 连不上,八成就栽在这两点:
-
host不匹配:Navicat 配置填了域名或公网 IP,却只改了'root'@'localhost' - 密码过期策略残留:没加
PASSWORD EXPIRE NEVER,SHOW CREATE USER 'root'@'%'里还能看到PASSWORD EXPIRE DEFAULT - 改完别急着开 Navicat,先用命令行
mysql -u root -h 127.0.0.1 -p测试是否真能握手成功


















