必须将port=3307写在my.ini的[mysqld]段内,其他段无效;需确认服务实际加载该配置文件、端口未被占用、重启服务并开放防火墙,客户端连接时须用-p 3307指定端口。

直接改 my.ini 的 [mysqld] 段落就行
MySQL 启动时只认配置文件里 [mysqld] 下的 port 值,其他地方写无效。Windows 上默认找 my.ini(不是 my.cnf),路径通常在安装目录根、C:\ProgramData\MySQL\MySQL Server 8.0\ 或自定义位置。
- 必须把
port=3307写在[mysqld]下,不能放在[client]或[mysql]里 - 如果已有旧实例占着
3306,新实例必须换端口,否则服务根本起不来(报错Can't start server: Bind on TCP/IP port) - 不用改 Windows 服务名,但服务名得唯一;比如叫
MySQL80_3307,避免和默认的MySQL80冲突
启动前务必检查 3307 端口是否空闲
Windows 下执行这条命令就能确认:
netstat -ano | findstr :3307
- 没输出 = 空闲,可以放心用
- 有输出 = 被占用,得换端口(比如试
3308)或杀掉占用进程(taskkill /PID xxx /F) - 注意别漏掉冒号:
:3307,写成3307会匹配到 PID 里含 3307 的进程,误判
初始化和注册服务时要显式指定配置文件路径
MySQL 不会自动猜你改了哪个 my.ini,尤其当你有多个实例时:
- 初始化数据目录必须带
--defaults-file:mysqld --initialize --defaults-file=D:\mysql-8.0.38-winx64\my.ini --basedir=D:\mysql-8.0.38-winx64 --datadir=D:\mysql-8.0.38-winx64\data
- 安装服务也得指定配置文件,否则它会回退到默认路径或报错:
mysqld --install MySQL80_3307 --defaults-file="D:\mysql-8.0.38-winx64\my.ini"
-
--defaults-file路径里含空格或中文?必须加英文双引号
验证端口是否真生效,别只信配置文件
改完配置、重启服务后,登录进去执行:
SHOW GLOBAL VARIABLES LIKE 'port';
- 返回值必须是
3307,不是3306,也不是空 - 外部连接必须用
-P 3307(大写P),写成-p 3307是输密码,会连错 - 连接命令示例:
mysql -h 127.0.0.1 -P 3307 -u root -p
最常被忽略的是:服务注册时没传 --defaults-file,导致它加载了别的配置(比如系统级 my.ini),端口还是 3306 —— 表面成功,实际没生效。











