必须先确认MySQL监听0.0.0.0:3306而非127.0.0.1,再配置ufw/firewalld精准放行3306端口并限制来源IP,同时云服务器需在安全组中同步放行,三者缺一不可。

先确认MySQL自己有没有“开门”
防火墙拦不住一个根本没监听的端口。连netstat -tlnp | grep :3306或ss -tlnp | grep :3306都看不到输出,说明MySQL压根没在3306上等连接——此时调防火墙纯属白忙。
重点看监听地址:127.0.0.1:3306表示只接受本地访问;0.0.0.0:3306或具体内网IP才可能被外部连上。前者必须改my.cnf里的bind-address并重启mysqld,否则防火墙再细也没用。
Linux下检查ufw/firewalld是否真放行了3306
ufw用户别只跑sudo ufw allow 3306/tcp就以为完事:这条命令默认允许所有来源,生产环境严禁这么干;更关键的是,它不处理本地回环流量,mysqld启动自检会失败。
- 必须先执行
ufw allow in on lo,确保127.0.0.1能通 - 再加业务规则,比如
ufw allow from 192.168.5.10 to any port 3306 proto tcp - 最后用
ufw status numbered确认规则顺序:回环规则必须在前,白名单其次,DROP兜底规则在最后
firewalld用户注意:--permanent不能省,临时规则重启即丢;加完务必firewall-cmd --reload,再用firewall-cmd --list-all核对ports:里真有3306/tcp。
云服务器上安全组才是第一道关卡
本地防火墙开得再细,安全组没配,流量根本到不了系统。阿里云、腾讯云、AWS控制台里,“入方向规则”必须显式添加:
面向 CRM 系统的 MySQL 8 数据库模式设计。当用户需要为客户关系管理(CRM)系统设计、评审、优化或生成数据库模式时,应使用此项技能。
- 协议类型选
TCP,端口范围填3306/3306(不是3306) - 源IP段必须收紧,比如
203.0.113.45/32或10.0.2.0/24,绝不要填0.0.0.0/0 - 规则生效有延迟,改完等10–30秒再测
安全组和系统防火墙是“与”关系:任一拒绝,连接就断。所以telnet your-server-ip 3306不通时,先去云平台确认安全组,别一头扎进iptables里调半天。
Windows防火墙里怎么快速验证3306是否被拦
打开“高级安全Windows Defender防火墙”,直奔“入站规则”,右上角搜索框输3306——如果没结果,或规则状态是“已禁用”,那端口就是被拦着的。
新建规则时注意三点:
- 规则类型选“端口”,协议选
TCP,本地端口填3306 - 操作选“允许连接”,配置文件三个勾全打(域/专用/公用)
- 验证不用装Telnet:PowerShell里跑
Test-NetConnection -ComputerName localhost -Port 3306,TcpTestSucceeded : True才算过
最容易被忽略的是conntrack超时问题:空闲连接被防火墙静默踢掉,现象是查询中途报Lost connection to MySQL server during query,MySQL日志却干净得像没发生过。这种问题得调内核参数,不是改防火墙规则能解决的。










