MySQL远程连接报错10061拒绝连接排查 MySQL

前言

用 Navicat 或命令行远程连接服务器 MySQL 时,报 Can't connect to MySQL server (10061),连接被拒绝。10061 通常不是账号密码错误,而是网络层连不上:MySQL 没监听外部地址、防火墙拦截、端口不通,或者绑定了 127.0.0.1。本文按网络层到服务层逐层排查,给出完整命令。

操作步骤

1. 先在服务器本机确认 MySQL 在监听

ss -tlnp | grep 3306

如果只显示 127.0.0.1:3306,说明只允许本机连接。

2. 修改绑定地址

编辑 my.cnf:

[mysqld]
bind-address = 0.0.0.0

重启:

systemctl restart mysqld

3. 给远程用户授权

CREATE USER 'remote'@'%' IDENTIFIED BY '强密码';
GRANT ALL ON *.* TO 'remote'@'%';
FLUSH PRIVILEGES;

% 表示任意来源,生产建议限定 IP 段。

4. 防火墙放行 3306

firewall-cmd --permanent --add-port=3306/tcp
firewall-cmd --reload

5. 云服务器控制台安全组放行 3306

系统防火墙之外,云厂商安全组同样要加 3306 入站规则。

6. 测试端口连通性

本地:

telnet 服务器IP 3306

或:

nc -zv 服务器IP 3306

7. 再尝试远程连接

mysql -h 服务器IP -u remote -p

常见坑

  1. bind-address 仍是 127.0.0.1,外部根本连不上,改完必须重启。
  2. 用户只授权了 localhost,远程账号没有远程权限。
  3. 服务器防火墙或安全组没放行 3306,端口直接被拒。
  4. MySQL 在 Docker 里没做端口映射,宿主机 3306 不通。
  5. 运营商或机房封了 3306,可改用自定义端口。
  6. 把授权主机写成 % 又暴露公网,极易被爆破,务必强密码+白名单。
  7. 10060 是超时(网络不通),10061 是拒绝(端口被拒),二者排查方向不同。

总结

10061 按顺序排查:MySQL 是否监听 0.0.0.0、远程账号是否授权、防火墙与安全组是否放行、端口是否可达。生产环境不要全网开放 3306,用 IP 白名单和强密码,必要时换端口或走 SSH 隧道。

遇到问题加QQ23979811 协助处理


emer 发布于  2026-11-14 07:11 
'); })();