navicat连接mysql 8.0+报1251错误是因认证协议不匹配:mysql默认用caching_sha2_password,而旧版navicat仅支持mysql_native_password;需执行alter user切换插件并flush privileges生效,且host必须与连接时一致。

MySQL 8.0+ 默认使用 caching_sha2_password 认证插件,而 Navicat 旧版本(尤其是低于 v15 的)不支持该协议,直接报错 1251 Client does not support authentication protocol requested by server。必须显式降级为 mysql_native_password 才能连通。
确认当前用户的认证插件类型
登录 MySQL 服务端(如用 mysql -u root -p),执行:
SELECT host, user, plugin, authentication_string FROM mysql.user WHERE user = 'your_username';
重点关注 plugin 字段值。若为 caching_sha2_password,且 Navicat 连接失败,就需切换。
修改用户认证方式为 mysql_native_password
执行以下语句(将 your_username 和 your_password 替换为实际值):
ALTER USER 'your_username'@'%' IDENTIFIED WITH mysql_native_password BY 'your_password';<br>FLUSH PRIVILEGES;
注意要点:
-
'your_username'@'%'中的%必须与你授权远程访问时用的 host 一致(比如之前是'root'@'192.168.1.%',这里也要对应) - 如果只改了
'your_username'@'localhost',对远程连接无效 - 执行后务必运行
FLUSH PRIVILEGES,否则不生效
Navicat 连接时仍失败的常见遗漏点
即使认证插件改了,也可能卡在其他环节:
- MySQL 配置中
bind-address仍是127.0.0.1→ 改为0.0.0.0或注释掉,重启mysqld - 用户权限未真正授予远程 host → 再跑一次
GRANT ALL ON *.* TO 'your_username'@'%';+FLUSH PRIVILEGES - 防火墙或云平台安全组没放行
3306端口 → 本地用telnet your_server_ip 3306测试是否通 - Navicat 连接配置里勾选了 SSL,但服务端没配 → 取消勾选 “Use SSL” 试试
最易被忽略的是:改完认证插件后没检查用户对应的 host 是否匹配远程来源,或者忘了 FLUSH PRIVILEGES —— 这两个动作缺一不可,否则一切白改。











