修改MySQL端口仅改port参数不行,必须同步调整bind-address、防火墙、云安全组及客户端连接配置,否则必然连接失败;需用ss或netstat验证真实监听状态,而非仅依赖SHOW VARIABLES。

直接改配置文件里的 port 参数就行,但只改这一项大概率连不上——因为端口空闲、防火墙、bind-address、客户端连接方式这四点没同步调整,就会卡在“连接被拒绝”上。
确认当前监听端口和配置值是否一致
MySQL 的 SHOW VARIABLES LIKE 'port' 只反映配置文件读取的值,不等于实际监听端口。必须用系统命令验证真实绑定状态:
- Linux/macOS:
sudo ss -tuln | grep :3306或sudo lsof -i :3306 - Windows:
netstat -ano | findstr :3306,再用任务管理器或tasklist /fi "pid eq XXXX"确认进程是mysqld.exe
如果没输出,说明 MySQL 根本没在 3306 监听——可能配置错段落、服务没启、或启动时因端口冲突静默失败。
编辑 my.cnf/my.ini 的 [mysqld] 段并检查 bind-address
port = 3307 必须写在 [mysqld] 下,写在 [client] 或 [mysql] 里无效。常见路径:
- Linux:/etc/my.cnf、/etc/mysql/my.cnf 或 /etc/mysql/mysql.conf.d/mysqld.cnf
- Windows:
C:\ProgramData\MySQL\MySQL Server 5.7\my.ini(ProgramData是隐藏目录)
同时检查 bind-address:
- 保持
bind-address = 127.0.0.1→ 新端口也只响应本地连接 - 要远程访问,改成
bind-address = 0.0.0.0或具体内网 IP,但必须配防火墙和用户权限 - 别写成
bind-address = 127.0.0.1:3307——语法错误,MySQL 启动会报错
验证目标端口空闲并重启服务
换端口前先确认没被占:
- Linux/macOS:
lsof -i :3307或nc -zv localhost 3307(返回connection refused才安全) - Windows:
netstat -ano | findstr :3307
重启后必须双重验证:
- 系统级:
ss -tuln | grep :3307(Linux)或netstat -ano | findstr :3307(Windows) - MySQL 内:
SELECT @@port;或SHOW VARIABLES LIKE 'port';
二者结果不一致,说明配置没生效或服务没真正重启成功。
同步更新客户端连接与系统防护规则
改完服务端,所有连接方都得显式指定新端口:
- 命令行:
mysql -u root -p -P 3307(注意大写-P) - 应用连接字符串(如 Python 的
pymysql.connect(port=3307)) - 图形工具:主机填
127.0.0.1:3307,别用localhost(默认走 socket)
系统防护常被忽略:
- Linux 防火墙:
firewall-cmd --add-port=3307/tcp --permanent && firewall-cmd --reload - SELinux(CentOS/RHEL):
semanage port -a -t mysqld_port_t -p tcp 3307 - 云服务器:安全组必须放行新端口 TCP 入向流量
最易漏的是客户端连接方式和 SELinux —— 尤其是 CentOS 7/8 上,没配 semanage 就算端口空闲、配置正确、服务重启了,也会连不上。


















