在 CentOS 8 中开放 MySQL 默认端口 3306,需要配置防火墙和 SELinux。以下是详细步骤:
1. 开放防火墙端口(Firewalld)
CentOS 8 默认使用 firewalld
管理防火墙,执行以下命令开放 3306 端口:
# 开放 TCP 3306 端口
sudo firewall-cmd --permanent --add-port=3306/tcp
# 重载防火墙规则使其生效
sudo firewall-cmd --reload
# 验证端口是否开放
sudo firewall-cmd --list-ports
输出示例:
3306/tcp
2. 配置 SELinux 允许 MySQL 访问 3306 端口
若 SELinux 处于 enforcing 模式,还需配置 SELinux 策略:
# 检查 SELinux 是否允许 MySQL 使用 3306 端口
sudo semanage port -l | grep mysql
# 如果未列出 3306,添加端口(通常不需要,MySQL 默认已关联 3306)
sudo semanage port -a -t mysql_port_t -p tcp 3306
3. 验证 MySQL 是否监听 3306 端口
确保 MySQL 服务正常运行且监听 3306 端口:
# 检查 MySQL 服务状态
sudo systemctl status mysqld
# 查看端口监听情况(确认 3306 端口已监听)
sudo ss -tulpn | grep :3306
输出示例:
tcp LISTEN 0 128 0.0.0.0:3306 0.0.0.0:* users:(("mysqld",pid=1234,fd=22))
4. 配置 MySQL 允许远程访问(可选)
默认情况下,MySQL 仅允许本地访问。若需远程连接,需修改配置文件:
# 编辑 MySQL 配置文件
sudo vi /etc/my.cnf # 或 /etc/mysql/my.cnf
# 添加或修改以下行(注释掉 bind-address 或设置为 0.0.0.0)
bind-address = 0.0.0.0 # 允许所有 IP 访问
# 或指定特定 IP
bind-address = 192.168.1.100 # 仅允许该 IP 访问
# 重启 MySQL 服务
sudo systemctl restart mysqld
5. 验证远程连接
在另一台机器上使用 mysql
客户端测试连接:
mysql -h your_server_ip -u love -p
若遇到连接问题,可检查:
- 服务器是否有公网 IP 且 3306 端口已在云服务商防火墙开放
- MySQL 用户是否被授权从远程主机连接(
CREATE USER 'love'@'%' ...
)
注意事项
安全风险:开放 3306 端口会暴露数据库,请确保:
- 使用强密码
- 限制允许访问的 IP(如
bind-address
设置) - 定期备份数据
端口冲突:若 3306 被其他服务占用,可修改 MySQL 监听端口:
# 在 /etc/my.cnf 中添加或修改 port = 3307 # 重启 MySQL 和防火墙 sudo systemctl restart mysqld sudo firewall-cmd --permanent --remove-port=3306/tcp sudo firewall-cmd --permanent --add-port=3307/tcp sudo firewall-cmd --reload
完成以上步骤后,MySQL 服务即可通过 3306 端口被外部访问。