10060错误本质是TCP连接未建立,需优先排查云安全组是否放行3306、MySQL是否监听0.0.0.0:3306(非127.0.0.1)、Navicat中是否填写服务器公网IP而非localhost,三者缺一不可。
10060 错误本质是 tcp 连接未建立成功,不是 mysql 认证失败,也不是密码错——它卡在“连都连不上”这一步。直接排查网络链路和服务器监听状态,别先改用户权限或密码。
检查云服务器 3306 端口是否对外暴露
云平台(阿里云/腾讯云/华为云等)的**安全组规则**默认不放行 3306,比系统防火墙更优先拦截。仅开放本地 iptables/firewalld 不起作用。
- 登录云控制台 → 找到对应 ECS 实例 → 进入「安全组」→ 查看「入方向规则」
- 确认存在一条规则:协议类型
TCP,端口范围3306,授权对象至少包含你的本地公网 IP(或临时设为0.0.0.0/0测试用) - 如果用的是轻量应用服务器、数据库专属实例(如 RDS),需单独配置白名单或公网地址,RDS 默认不分配公网 IP
确认 MySQL 正在监听 0.0.0.0:3306 而非 127.0.0.1:3306
bind-address=127.0.0.1 是云服务器镜像常见默认值,它只接受本机连接,远程请求直接被拒绝,且不报错日志。
- 进服务器执行:
ss -tlnp | grep :3306或netstat -tuln | grep :3306 - 正确输出应含
0.0.0.0:3306或*:3306;若只显示127.0.0.1:3306,说明配置未生效 - 修改
/etc/my.cnf或/etc/mysql/mysql.conf.d/mysqld.cnf中的bind-address为0.0.0.0,并确保该配置没被其他 include 文件覆盖 - 改完必须重启服务:
sudo systemctl restart mysql(Ubuntu/Debian)或sudo systemctl restart mysqld(CentOS/RHEL)
Navicat 连接参数里别填 localhost 或 127.0.0.1
你本地运行 Navicat,填 localhost 会让它去连自己机器的 3306,而不是云服务器。必须填云服务器的**公网 IP**(不是内网 IP)。
- 在云服务器控制台查「弹性公网 IP」或「公网地址」字段,复制那个 IPv4 地址
- Navicat 新建连接时,
Host name/IP address填这个公网 IP,Port确认是3306 - 如果服务器开了 SSH,但你没配 SSH 隧道,就别点「SSH」页签——勾了却没填 SSH 信息会导致 10060,且错误提示不变
MySQL 用户权限不是 10060 的直接原因,但会掩盖真实问题
很多人一看到连不上就急着 GRANT ... @'%',其实此时连接根本没到认证阶段。等前三个环节全通了,再处理权限。
- 权限命令本身有版本差异:
mysql 8.0+推荐用CREATE USER 'u'@'%' IDENTIFIED BY 'p'; GRANT ...,避免UPDATE user SET host='%'...导致 plugin 字段异常 - 执行后务必
FLUSH PRIVILEGES;,否则不生效 - 验证权限是否生效:在云服务器上执行
mysql -h 127.0.0.1 -u your_user -p(走本地 loopback)能登,不代表远程能登;必须换台机器(或手机热点)用 Navicat 测
最容易被忽略的是:云服务器厂商的安全组和 MySQL 的 bind-address 是两层独立过滤,缺一不可;而很多人只调了一层就以为搞定了。连通性验证要分步——先 telnet 公网IP 3306(Windows 开启 telnet 客户端),通了再开 Navicat。


















