修改mysql默认端口需在/www/server/mysql/etc/my.cnf的[mysqld]段中设port=3307,同步调整bind-address、放行防火墙及云安全组、重启服务,并更新客户端连接配置与用户权限。

改端口本身不能防攻击,但能过滤掉大量针对 3306 的自动化扫描和暴力尝试。关键不是“改了就行”,而是改对位置、改完能连、改后不被系统拦住。
确认 MySQL 实际加载的配置文件路径
宝塔面板下,mysqld 通常不读 /etc/my.cnf,而是优先加载 /www/server/mysql/etc/my.cnf。改错地方等于白改。
- 执行
mysqld --help --verbose | grep "Default options",看输出里列出的第一个配置路径 - 如果
/www/server/mysql/etc/my.cnf存在,就编辑它;不存在再查/etc/my.cnf或/etc/mysql/my.cnf - 别只靠“感觉”去改,
grep -n "port" /www/server/mysql/etc/my.cnf确认当前值在哪一行
只在 [mysqld] 段写 port = 3307,其他段无效
[client] 或 [mysql] 下的 port 只影响本地客户端默认连接行为,完全不改变服务监听端口。
- 打开配置文件,定位到
[mysqld]段(不是[mysqld_safe],也不是开头没方括号的行) - 确保该段内有且仅有一行:
port = 3307(等号前后可有空格,但不能有引号或注释符) - 删掉同段里可能存在的
skip-networking = 1,否则端口设置彻底失效 - 改完用
mysqld --validate-config(MySQL 8.0.14+ 支持)检查语法,避免因拼写错误导致启动失败
端口能监听 ≠ 能连上:bind-address 和防火墙必须同步动
常见现象是 netstat -tlnp | grep :3307 看不到监听,或者能看到监听但远程死活连不上——八成卡在这两处。
-
bind-address = 127.0.0.1表示只监听本地回环,新端口也对外不可见;如需远程访问,改成bind-address = 0.0.0.0或具体内网 IP - 宝塔「安全」页面放行端口,只是开了宝塔自建防火墙;你还得手动运行:
firewall-cmd --permanent --add-port=3307/tcp && firewall-cmd --reload(CentOS/RHEL)或ufw allow 3307(Ubuntu/Debian) - 云服务器(阿里云、腾讯云等)必须在控制台的安全组里额外放行新端口,这个最容易漏
- SELinux 用户注意:
semanage port -a -t mysql_port_t -p tcp 3307,否则系统直接拒绝绑定
验证和后续动作:别只信 SELECT @@port
SELECT @@port 返回的是当前连接所用的端口,不是服务监听端口。它可能显示 3307,但其实是连上了另一个实例(比如 Docker 容器里的 MySQL),而你本机改了配置却没重启的那个还在听 3306。
- 先确认进程是否真在听新端口:
ss -tlnp | grep :3307或lsof -i :3307 - 本地测试用:
mysql -u root -p -h 127.0.0.1 -P 3307(注意-P是大写,且-h 127.0.0.1强制走 TCP,绕过 socket 文件) - 远程测试前,先关掉本机所有其他 MySQL 实例(
ps aux | grep mysql),避免干扰判断 - 改完端口后,所有应用连接字符串、代码里的
port配置、Navicat 连接设置、宝塔数据库列表里的“连接地址”都要同步更新,否则连不上是常态
最常被忽略的点:改完端口后,MySQL 用户的 host 权限没跟着调。比如用户是 'root'@'localhost',那即使你把端口改成 3307 并绑定了 0.0.0.0,远程用 root 也连不上——因为权限只允许 localhost,不匹配你的实际访问 IP。











