修改mysql默认端口并禁用外网访问需同步操作:1.编辑my.cnf/my.ini的[mysqld]段,设port=3307且bind-address=127.0.0.1;2.重启服务并验证监听;3.关闭防火墙及云安全组对3306/新端口的外网放行;4.客户端连接须显式指定新端口。

修改 MySQL 默认端口并禁用外网直接访问,是数据库安全加固中最基础也最有效的两项操作。核心不是“改一个数字”,而是切断默认攻击面+收缩访问范围,两者必须同步实施,缺一不可。
修改 MySQL 监听端口(只改 [mysqld] 段的 port)
MySQL 端口不能通过 SQL 命令动态修改,必须编辑配置文件并重启服务:
- 先确认当前实际端口:
mysql -u root -p -e "SHOW GLOBAL VARIABLES LIKE 'port';" - 定位真实生效的配置文件:运行
mysqld --verbose --help | grep "Default options",常见路径包括/etc/my.cnf、/etc/mysql/mysql.conf.d/mysqld.cnf(Ubuntu)、C:\ProgramData\MySQL\MySQL Server X.X\my.ini(Windows) - 在配置文件的
[mysqld]段下添加或修改一行:port = 3307(推荐避开 3306/1433/1521 等常见端口) - 确保该端口未被占用:
sudo lsof -i :3307或netstat -tuln | grep :3307返回为空才安全
禁用外网访问(靠 bind-address 控制,不是靠防火墙)
仅改端口不设访问范围,等于换锁芯但门还大敞着。关键在 bind-address 配置:
- 若只需本机程序连接(推荐生产环境),设为:
bind-address = 127.0.0.1—— 此时 MySQL 只监听本地回环,任何远程 IP 都连不上 - 若需内网其他机器访问(如应用服务器与 DB 分离),设为内网 IP:
bind-address = 192.168.1.100(替换成你的 DB 服务器内网地址) -
绝对避免写
bind-address = 0.0.0.0,除非你已严格配置了防火墙+用户权限+SSL,并清楚后果
配套必须做的三件事
改完配置不等于生效,以下环节任一缺失都会导致连接失败或暴露风险:
-
重启服务并验证监听:执行
sudo systemctl restart mysql(或mysqld),再用ss -tlnp | grep :3307确认 mysqld 进程真在监听新端口 - 关掉外网入口:Linux 上关闭 firewalld/ufw 对 3306 的放行;云服务器(阿里云/腾讯云/AWS)务必删除安全组中对 3306 的入方向规则,新端口也不要开放外网
-
客户端显式指定端口:命令行连接加
-P 3307(大写 P),应用代码、连接池、宝塔面板等所有调用处,都必须更新 port 参数,否则仍会尝试连 3306
额外加固建议(非必需但强烈推荐)
端口+绑定只是第一层,配合以下措施可显著提升防护等级:
- 删除或禁用
root@'%'账号,只保留root@localhost和必要业务账号(如app@192.168.1.20) - 启用 MySQL 的
require_secure_transport=ON(强制 SSL 连接),尤其当内网通信也需加密时 - 定期审计
SELECT host,user FROM mysql.user;,清理空密码、匿名用户、过期账号











