旧版本Navicat无法连接MySQL 8.0是因认证协议不匹配,需将用户认证插件改为mysql_native_password并严格匹配host、重设密码、执行FLUSH PRIVILEGES生效。

旧版本 Navicat(如 12 或 15 早期版)连不上 MySQL 8.0,不是密码错了,是认证协议不匹配——MySQL 8.0 默认用 caching_sha2_password,而 Navicat 根本不加载这个插件,直接报错 ERROR 2059、ERROR 1251 或 “Client does not support authentication protocol”。改回 mysql_native_password 就能连,但必须做对三件事:改对用户、带密码重设、刷新权限。
执行 ALTER USER 时 host 和密码缺一不可
MySQL 要求显式指定用户+主机组合,且 IDENTIFIED WITH 必须跟 BY 'xxx'。漏掉任一环节都会失败:
-
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password→ 报错ERROR 1827 (HY000): The password cannot be empty -
ALTER USER 'root' IDENTIFIED WITH mysql_native_password BY '123'→ 实际改的是'root'@'%'(如果存在),而不是你正在连的'root'@'localhost',导致白忙活 - Navicat 连的是
127.0.0.1,但只改了'root'@'localhost'→ 不生效,因为 MySQL 视localhost和127.0.0.1为两个不同 host
正确写法(按需选一行):
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;
FLUSH PRIVILEGES 不是可选项,是生效前提
MySQL 权限系统有内存缓存。ALTER USER 只更新磁盘上的 mysql.user 表,不自动刷新运行时权限状态。不执行这句,Navicat 仍会用旧插件握手,错误照旧。
- 执行后无输出即成功;出现
Query OK表示已加载 - 不需要重启 MySQL 服务,
FLUSH PRIVILEGES本身足够轻量 - 验证是否真生效:
SELECT user, host, plugin FROM mysql.user WHERE user = 'root';,确认plugin列值为mysql_native_password
Navicat 连接配置要和 MySQL 用户 host 严格对应
填错 host 是最隐蔽的失败原因:
- Windows 下,
localhost默认走命名管道或 shared memory;若 MySQL 没启用这些,连接会 fallback 失败 —— 改填127.0.0.1强制走 TCP,路径更确定 - 如果
SELECT Host,User FROM mysql.user里只有'root'@'localhost',但 Navicat 填的是127.0.0.1,就必须单独执行ALTER USER 'root'@'127.0.0.1' - 密码含特殊字符(如
@、/、\)可能被 Navicat 解析异常,临时换纯字母数字密码快速验证
真正容易被忽略的是 host 匹配粒度:MySQL 的 user@host 是精确字符串匹配,不是模糊通配;'root'@'localhost'、'root'@'127.0.0.1'、'root'@'%' 是三个独立账户,改一个不影响另外两个。别指望改完 localhost 就一劳永逸。



















