MySQL远程连接失败需同时检查三处:本地防火墙(firewalld/ufw)放行3306端口、MySQL配置bind-address=0.0.0.0允许远程访问、云服务器安全组开放TCP 3306端口。

MySQL 默认使用 3306 端口,若远程连接失败,很可能是系统防火墙(如 firewalld 或 ufw)或云服务器安全组未放行该端口。配置关键是确认当前使用的防火墙服务,并针对性开放 3306 端口,同时确保 MySQL 服务本身允许远程访问。
确认正在运行的防火墙服务
Linux 常见防火墙有 firewalld(CentOS/RHEL 7+、Fedora)、ufw(Ubuntu/Debian)和 iptables(较老系统)。先查清你用的是哪一个:
- firewalld:运行 sudo systemctl status firewalld,若显示 active,则使用 firewalld 规则
- ufw:运行 sudo ufw status verbose,若启用则走 ufw 流程
- iptables:运行 sudo iptables -L -n | grep 3306,若无输出且前两者都未启用,才需手动配 iptables(不推荐新手直接操作)
firewalld 放行 MySQL 端口(3306)
firewalld 推荐使用服务名方式管理,更安全可靠:
- 查看是否已有 mysql 服务定义:sudo firewall-cmd --get-services | grep mysql
- 若存在,直接启用:sudo firewall-cmd --permanent --add-service=mysql
- 若不存在或想手动指定端口:sudo firewall-cmd --permanent --add-port=3306/tcp
- 重载规则生效:sudo firewall-cmd --reload
- 验证:sudo firewall-cmd --list-ports 或 sudo firewall-cmd --list-all
ufw 放行 MySQL 端口(3306)
Ubuntu/Debian 用户常用 ufw,操作简洁:
- 启用 ufw(如未启用):sudo ufw enable
- 允许 3306 端口(仅 TCP):sudo ufw allow 3306/tcp
- 如需限制仅某 IP 访问(更安全):sudo ufw allow from 192.168.1.100 to any port 3306
- 查看状态:sudo ufw status numbered
别忘了检查云服务器安全组(阿里云、腾讯云、AWS 等)
即使本地防火墙已放行,云平台还有独立的安全组策略,必须同步配置:
- 登录云控制台 → 找到对应云服务器(ECS/EC2)→ 进入“安全组”设置
- 编辑入方向(Inbound)规则,添加一条:协议类型 TCP,端口范围 3306,源 IP 可填具体 IP 或 0.0.0.0/0(不建议生产环境全放开)
- 保存后无需重启服务器,规则即时生效
不复杂但容易忽略,三处都要检查:本地防火墙(firewalld/ufw)、MySQL 绑定地址(bind-address = 0.0.0.0 在 my.cnf 中)、云平台安全组。缺一不可。










