mysql环境搭建时防火墙端口放行配置说明

来源:这里教程网 时间:2026-02-28 20:43:05 作者:

MySQL 默认端口是什么,为什么必须确认它

MySQL 默认监听

3306
端口,但实际部署中可能被修改(比如多实例、云数据库、容器化部署)。不确认真实端口就放行
3306
,很可能连不上——尤其是用
mysqld --port=3307
启动,或配置文件里写了
port = 3308

查正在运行的 MySQL 实际端口:
sudo ss -tlnp | grep mysqld
netstat -tlnp | grep mysql
查配置文件设定:
grep "^port" /etc/my.cnf /etc/mysql/my.cnf /usr/etc/my.cnf 2>/dev/null
Docker 启动时显式映射了端口(如
-p 3307:3306
),则需放行宿主机的
3307
,而非容器内
3306

firewalld 放行 MySQL 端口的正确命令

CentOS/RHEL 7+ 默认用

firewalld
,直接开放端口比添加服务更可控,避免因
mysql
服务定义不匹配导致失效。

sudo firewall-cmd --permanent --add-port=3306/tcp
sudo firewall-cmd --reload
务必加
--permanent
,否则重启 firewalld 后规则丢失
--reload
是生效必需步骤,仅
--add-port
不会立即放行
若 MySQL 绑定到特定 IP(如
bind-address = 192.168.1.100
),防火墙规则仍只需放行端口,无需额外限制源地址(那是
iptables
或网络层的事)

ufw 下如何安全放行,避免全网开放

Ubuntu/Debian 常用

ufw
,默认策略是拒绝入站。只开
3306
端口不够安全,应限制访问来源 IP 段。

sudo ufw allow from 192.168.1.0/24 to any port 3306 proto tcp
sudo ufw reload
不写
from
就是允许任意 IP 连接,等同于暴露数据库到公网
若需从单个跳板机访问,写成
from 10.0.5.22
更精确
ufw status verbose
可确认规则是否已启用且顺序正确(ufw 按规则顺序匹配,靠前的 deny 可能拦截后续 allow)

Windows Server 上通过 PowerShell 配置防火墙

Windows Server 的 MySQL 若用于内部系统集成,常被忽略防火墙设置。图形界面容易点错,PowerShell 命令更可靠。

New-NetFirewallRule -DisplayName "MySQL Server" -Direction Inbound -Protocol TCP -LocalPort 3306 -Action Allow -Enabled True
必须指定
-Direction Inbound
,出站规则对客户端连接无影响
若 MySQL 服务运行在非标准账户下(如 LocalSystem),规则仍生效;但若启用了“仅允许安全连接”,还需额外配置 IPsec 策略 执行后检查:
Get-NetFirewallRule -DisplayName "MySQL Server" | Select-Object Enabled, Direction, Action

实际放行后仍连不上,大概率是 MySQL 自身没监听外网(

bind-address = 127.0.0.1
)、用户权限没授权远程主机(
GRANT ... ON <em>.</em> TO 'user'@'%' IDENTIFIED BY 'pwd'
),或者云平台(阿里云/腾讯云)的安全组没同步放开——防火墙只是其中一环,别只盯着它调。

相关推荐