MySQL 8.0 如何修改默认端口 3306 并配置防火墙允许远程访问

文章导读
MySQL 8.0 修改默认端口需编辑配置文件中的 port 参数,配合防火墙放行新端口及调整用户 host 权限才能生效。此操作适用于需要隐藏服务特征或规避端口冲突的场景,但修改端口本身不能替代密码强度和网络隔离等核心安全措施。
📋 目录
  1. 命令速用版
  2. 为什么会这样
  3. 分步处理
  4. 怎么验证是否生效
  5. 常见坑
  6. 常见问题
A A

MySQL 8.0 修改默认端口需编辑配置文件中的 port 参数,配合防火墙放行新端口及调整用户 host 权限才能生效。此操作适用于需要隐藏服务特征或规避端口冲突的场景,但修改端口本身不能替代密码强度和网络隔离等核心安全措施。

先说结论:修改端口属于配置部署类操作,需同步更新防火墙规则和安全组,否则远程连接会失败。

  • 适合:需要规避自动化扫描或端口被占用的数据库服务器
  • 先准备:备份配置文件 my.cnf 并确认新端口未被占用
  • 验收:使用 telnet 或 mysql 客户端从远程机器测试连通性

命令速用版

以下命令基于 Linux 系统,需 root 权限执行。

修改配置文件:vim /etc/my.cnf,在 [mysqld] 下添加 port=3307

重启服务:systemctl restart mysqld

防火墙放行(CentOS):firewall-cmd `--permanent` `--add-port`=3307/tcp && firewall-cmd `--reload`

防火墙放行(Ubuntu):ufw allow 3307/tcp

查看端口监听:ss -tlnp | grep 3307

为什么会这样

MySQL 默认监听 3306 端口且防火墙通常拦截外部访问,修改端口后服务不会自动通知防火墙。

数据库服务启动时仅读取配置文件绑定指定端口,操作系统防火墙独立管理网络包过滤。若只改配置不放行防火墙,外部请求会在网络层被丢弃。此外,云服务商的安全组规则优先级高于系统防火墙,需同步检查。

MySQL 8.0 如何修改默认端口 3306 并配置防火墙允许远程访问

分步处理

按顺序执行以下步骤,每步完成后检查状态再继续。

1. 备份配置文件
执行 cp /etc/my.cnf /etc/my.cnf.bak,防止配置错误导致服务无法启动。

2. 修改端口配置
编辑配置文件,找到 [mysqld] 段落,添加或修改 port=3307(示例使用 3307)。

3. 重启 MySQL 服务
执行 systemctl restart mysqld,若启动失败查看 journalctl -u mysqld 排查错误。

4. 配置系统防火墙
根据系统类型执行 firewalld 或 ufw 命令放行新端口,确保 TCP 协议允许。

5. 配置云安全组
登录云控制台,在实例安全组入方向添加新端口 TCP 规则,源地址建议限制为特定 IP。

6. 授权远程用户
登录 MySQL 执行 CREATE USER 'user'@'%' IDENTIFIED BY 'password'; 并授权,确保 host 允许远程连接。

怎么验证是否生效

验证分为本地监听检查和远程连通性测试两部分。

本地检查:执行 ss -tlnp | grep mysql,确认 LISTEN 地址为 0.0.0.0:3307 而非 127.0.0.1。

MySQL 8.0 如何修改默认端口 3306 并配置防火墙允许远程访问

远程测试:在另一台机器执行 mysql -h 服务器 IP -P 3307 -u 用户 -p,能成功登录即配置生效。

端口探测:使用 telnet 服务器 IP 3307nc -zv 服务器 IP 3307 确认端口可达。

常见坑

配置过程中容易忽略 SELinux 限制和云厂商安全组,导致服务正常但无法连接。

  • SELinux 拦截:CentOS 开启 SELinux 时,非标准端口可能被拦截,需执行 semanage port -a -t mysqld_port_t -p tcp 3307
  • 云安全组遗漏:系统防火墙已放行但云控制台安全组未开放,外部流量仍无法到达实例。
  • 用户 host 限制:MySQL 用户默认 host 为 localhost,需修改为 % 或特定远程 IP 才能远程登录。
  • bind-address 配置:配置文件中若设置 bind-address=127.0.0.1,需改为 0.0.0.0 或注释该行。

常见问题

修改端口后 MySQL 服务启动失败怎么办

查看错误日志确认端口是否被占用或配置文件语法错误。

执行 journalctl -u mysqld -n 50 查看最近日志,常见原因是新端口已被其他程序占用或 my.cnf 缩进格式错误。

远程连接报错 2003 Can't connect to MySQL server

通常是防火墙或安全组未放行新端口导致网络不通。

优先检查云控制台安全组入站规则,再检查系统防火墙状态,最后确认 MySQL 用户 host 权限是否允许远程。

如何恢复默认 3306 端口

将配置文件 port 参数改回 3306 并重启服务即可。

修改 /etc/my.cnf 中 port 值为 3306,执行 systemctl restart mysqld,同时记得在防火墙中重新放行 3306 端口。