报错10061说明tcp连接被拒绝,与密码无关,需先确认mysql服务运行、监听0.0.0.0:3306、防火墙及云安全组放行;报错2059则因mysql 8.4默认caching_sha2_password插件不兼容旧版navicat,须启用mysql_native_password插件并修改用户认证方式。
navicat 连不上 mysql 8.4,大概率不是密码输错了,而是认证插件不兼容或服务没监听正确端口——先查 10061 还是 2059 错误码,再针对性处理。
报错 10061:目标计算机积极拒绝连接
这说明 Navicat 根本没连上 MySQL 的 TCP 端口,和密码、插件完全无关。常见于服务未启动、绑定地址错误或防火墙拦截。
- 用命令确认 MySQL 是否真在监听
3306:Windows 执行netstat -an | findstr :3306,Linux/macOS 执行ss -tlnp | grep :3306;如果只看到127.0.0.1:3306,说明它拒绝外部连接 - 检查
my.cnf或my.ini中的bind-address:必须设为0.0.0.0或注释掉该行,不能留127.0.0.1 - Windows 防火墙要添加入站规则放行
3306;Linux 上用ufw allow 3306或firewall-cmd --add-port=3306/tcp --permanent - 云服务器(如阿里云)必须在安全组里手动开放
3306端口,仅改 MySQL 配置没用
报错 2059 或 1251:认证插件不支持
这是 MySQL 8.4 默认用 caching_sha2_password,而旧版 Navicat(比如 10.x 或部分 12.x)只认 mysql_native_password。错误信息里会明确出现 caching_sha2_password 字样。
- 先确认插件是否已加载:登录 MySQL 后执行
SELECT plugin FROM mysql.user WHERE User='root' AND Host='localhost';,返回不是mysql_native_password就得改 - 执行修改语句前,确保
mysql_native_password插件已启用:在[mysqld]段下加mysql_native_password = ON(MySQL 8.4 要求显式开启),再重启服务 - 改用户认证方式:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your_password';,注意Host必须和mysql.user表里一致,'%'和'localhost'是两个不同用户 -
FLUSH PRIVILEGES;必须执行,否则不生效;改完后重新测试连接,不要跳过这步
Navicat 连接参数填错导致“Access denied”
即使插件和端口都对,填错一个字段也会直接拒连。尤其容易忽略的是主机名和 socket 路径混淆。
- 本地连接时,“主机”务必填
127.0.0.1,别填localhost—— 后者在某些系统会走 Unix socket,而 Navicat 强制走 TCP,必然失败 - 端口别假设是
3306:进 MySQL 执行SHOW VARIABLES LIKE 'port';确认实际值 - “高级”选项卡里关掉
压缩通信,部分 MySQL 8.4 + Navicat 组合启用了压缩协议但没对齐,会导致握手失败 - 如果勾了
使用SSH隧道,但没配 SSH 主机/端口/密钥,连接会卡住或报超时,不用 SSH 就取消勾选
MySQL 8.4 特有陷阱:插件未加载就执行 ALTER USER
MySQL 8.4 对插件管理更严格。如果直接运行 ALTER USER ... IDENTIFIED WITH mysql_native_password 报 ERROR 1524 (HY000): Plugin 'mysql_native_password' is not loaded,说明插件根本没启用。
- Windows 下打开
C:\ProgramData\MySQL\MySQL Server 8.4\my.ini(隐藏文件夹,需显示系统文件) - 在
[mysqld]段下加一行:mysql_native_password = ON,不是default_authentication_plugin - 保存后必须重启服务:
net stop MySQL84 && net start MySQL84(服务名以实际为准) - 重启后再进 MySQL 执行
INSTALL PLUGIN mysql_native_password SONAME 'auth_socket.so';(Linux)或对应 DLL(Windows),但通常加配置项就够了
真正卡住的地方往往不是某一步做错,而是改了插件没重启服务、改了 bind-address 没开防火墙、或者以为 localhost 和 127.0.0.1 等价——这些点漏掉任何一个,都会让前面所有操作白忙。











