核心原因是认证插件不兼容、用户host不匹配、MySQL未监听外网、防火墙未放行3306——四者缺一不可;Navicat 14及更早版本不支持caching_sha2_password,须执行ALTER USER指定正确host并设为mysql_native_password,且必须FLUSH PRIVILEGES生效。

刚装好的 MySQL 8.0 无法通过 Navicat 远程连接,**核心原因不是密码错、端口错或服务没启,而是认证插件 + 用户 host + 网络监听三者不匹配**。这三者缺一不可,改错一个就白忙。
为什么 ALTER USER 后还是报错 1251?
错误信息 ERROR 1251 (HY000): Client does not support authentication protocol requested by server 直接指向认证协议不兼容:MySQL 8.0 默认用 caching_sha2_password,而 Navicat 14 及更早版本只认 mysql_native_password。
但很多人执行了 ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'xxx'; 却仍失败——因为远程连接时 Navicat 实际尝试的是 'root'@'192.168.1.100' 或 'root'@'%',而你只改了 localhost 这条记录。
- 必须确认你要连的用户 host 和实际来源完全一致(比如 Navicat 填的是服务器 IP
192.168.1.100,那就要改'root'@'192.168.1.100';填的是域名或公网 IP,host 就得是那个值或'%') -
FLUSH PRIVILEGES;必须执行,否则修改不生效 - 如果原用户不存在(比如只有
root@localhost),不能直接ALTER,得先CREATE USER 'root'@'%'再授权
为什么 Navicat 显示 “Host xxx is not allowed to connect”?
这是权限模型层面的拒绝,和密码、插件都无关。MySQL 8.0 安装后默认只创建 root@localhost,它根本不会接受任何非本地 IP 的连接请求。
检查方式很简单:
SELECT user, host FROM mysql.user WHERE user = 'root';
如果结果里没有 root@'%' 或对应你的客户端 IP 的记录,那就没戏。
- 新增远程用户:
CREATE USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'your_strong_password'; - 授予权限:
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION; - 刷新权限:
FLUSH PRIVILEGES; - 生产环境严禁用
%,应限定为具体网段,如'app_user'@'192.168.10.%'
为什么 telnet 都不通,Navicat 却还在转圈?
Navicat 卡在“正在连接…”或报 ERROR 2003 (HY000): Can't connect to MySQL server,大概率是 MySQL 根本没监听外部网络接口。
检查命令:ss -tlnp | grep :3306(Linux/macOS)或 netstat -ano | findstr :3306(Windows)
如果看到的是 127.0.0.1:3306,说明 bind-address = 127.0.0.1 还在生效。
- 编辑配置文件(
/etc/mysql/mysql.conf.d/mysqld.cnf或C:\ProgramData\MySQL\MySQL Server 8.0\my.ini) - 找到
bind-address行,改为bind-address = 0.0.0.0(或注释掉) - 同时检查
mysqlx-bind-address,也要设为0.0.0.0或注释 - 重启服务:
sudo systemctl restart mysql(Linux)或 Windows 服务里重启MySQL80
Navicat 连接设置里哪些选项最容易踩坑?
很多问题不是 MySQL 配错了,而是 Navicat 自己勾选了不该勾的选项。
- 勾了「SSH 隧道」但没填 SSH 主机/端口/密钥 → 连接会卡住或超时;确认不需要 SSH 就取消勾选
- 勾了「Use SSL」但 MySQL 没配证书 → 直接拒绝握手;测试阶段建议取消勾选
- 「Save password」被禁用,但你填了密码 → 实际没传过去;确保密码框有内容且未被遮挡
- 「Advanced」页签里「Compress data」或「Auto-reconnect」开启后引发兼容性问题 → 初次连接建议全关
真正麻烦的从来不是单点问题,而是四个条件要同时满足:用户存在且 host 匹配、认证插件降级、MySQL 监听外网、防火墙放行 3306。漏掉任何一个,Navicat 都只会给你一个模糊的“连接失败”。


















