修改 MySQL 默认端口需在 my.cnf(Linux)或 my.ini(Windows)的 [mysqld] 段中设置 port = 3307,重启 mysqld 服务生效;[client] 段 port 不影响监听;必须同步开放防火墙、SELinux 及云安全组,并在客户端连接时用 -P 指定端口。

修改 MySQL 默认端口需要改 my.cnf(或 my.ini)中的 port 配置项
MySQL 启动时读取配置文件,port 项决定监听端口,默认是 3306。改端口必须改这个值,不能只靠命令行参数临时覆盖(除非你每次手动加 --port=3307 启动,但不实用)。
常见路径:
- Linux:/etc/my.cnf、/etc/mysql/my.cnf、/usr/etc/my.cnf 或 /etc/my.cnf.d/*.cnf
- Windows:MySQL 安装目录下的
my.ini(如C:\Program Files\MySQL\MySQL Server 8.0\my.ini)
找到 [mysqld] 段,在其下方添加或修改:
port = 3307
注意:[client] 段的 port 只影响本地客户端默认连接端口,不影响服务监听——真正起作用的是 [mysqld] 下的 port。
改完配置必须重启 mysqld 进程,否则端口不会变
MySQL 不支持运行时热修改监听端口。即使你执行 SET GLOBAL port = 3307;,也会报错 Variable 'port' is a read only variable。
重启方式取决于部署方式:
- systemd 系统(主流 Linux):
sudo systemctl restart mysqld或sudo systemctl restart mysql(服务名可能为mysql或mysqld) - macOS(Homebrew):
brew services restart mysql - Windows:在服务管理器中重启
MySQL80之类的服务名,或运行net stop MySQL80 && net start MySQL80
重启后用 ss -tlnp | grep :3307(Linux)或 netstat -an | findstr :3307(Windows)确认监听是否生效。
防火墙和 SELinux(Linux)可能拦截新端口
端口改了,但连不上?大概率是系统级防护没同步放开。
- iptables/firewalld:需显式放行新端口,例如
sudo firewall-cmd --add-port=3307/tcp --permanent && sudo firewall-cmd --reload - SELinux(RHEL/CentOS):MySQL 默认只被允许绑定
3306,要加规则:sudo semanage port -a -t mysqld_port_t -p tcp 3307(若未安装policycoreutils-python-utils,先装) - 云服务器(如阿里云、AWS):安全组规则也得手动更新,只改本地配置没用
客户端连接时,也要显式指定端口:mysql -h 127.0.0.1 -P 3307 -u root -p(注意是大写 -P,小写 -p 是密码)。
连接失败时优先检查 mysqld 错误日志,不是看 netstat
如果重启后 netstat 看不到监听,别急着调防火墙——先查 MySQL 自己的日志。启动失败往往因为:
- 端口被其他进程占用(
lsof -i :3307或ss -tuln | grep :3307) - 配置文件语法错误(比如多了一个逗号、引号没闭合),导致 mysqld 启动失败静默退出
-
bind_address设成了127.0.0.1且新端口被限制(少见,但某些旧版本有 bug)
错误日志路径通常在 log_error 配置项里,没设的话默认在数据目录下叫 hostname.err。它比任何外部检测都直接告诉你“为什么没起来”。










