先查mysql错误日志确认是否真为端口冲突(出现“bind on tcp/ip port”),再检查my.ini路径、确保port=3307写在[mysqld]段且保存为utf-8无bom,重启服务后同步更新phpmyadmin config.inc.php、php代码、wordpress、禅道及docker等所有客户端配置。

确认真的是3306被占,而不是MySQL根本没起来
很多人一看到XAMPP控制面板里MySQL显示“Stopped”,就急着去改my.ini,结果改完还是起不来。先点MySQL行右边的Logs按钮,打开日志文件末尾几行,重点找这句:Can't start server: Bind on TCP/IP port。只有出现它,才是端口冲突;如果看到unknown variable、innodb_data_file_path或Failed to open log file这类报错,说明my.ini本身有语法错误、路径写错,或者数据目录权限/损坏问题——得先修这些,再谈换端口。
改my.ini里的port=3307必须写对位置和编码
my.ini在C:\xampp\mysql\bin\my.ini(不是etc目录下那个同名文件)。用VS Code或Notepad++打开,在[mysqld]段落里加或改这一行:
port=3307
注意三点:
-
port必须在[mysqld]下面,写在[client]或文件末尾无效 - 保存时选“UTF-8 无 BOM”格式,记事本默认可能带BOM,MySQL读到会静默失败
- 改完别只点
Start,先Stop再Start,否则配置不重载
phpMyAdmin连不上?光改MySQL端口不够,还得动config.inc.php
MySQL端口变成3307后,phpMyAdmin默认仍连3306,页面打不开或报#2002 Cannot log in to the MySQL server。打开C:\xampp\phpMyAdmin\config.inc.php,找到这行:
$cfg['Servers'][$i]['port'] = '';
改成:
$cfg['Servers'][$i]['port'] = '3307';
如果文件里没有这行,就在$cfg['Servers'][$i]['host'] = '127.0.0.1';附近手动加上。别漏掉单引号,也别写成数字3307(它要字符串)。
你的PHP代码、WordPress、禅道等也得同步改端口
本地项目不会自动感知MySQL端口变了。常见场景:
- PHP用
mysqli_connect():第5个参数传3307,比如mysqli_connect('127.0.0.1', 'root', '', 'test', 3307) - PDO连接:DSN里必须显式写
port=3307,例如mysql:host=127.0.0.1;port=3307;dbname=test - WordPress:一般不用动,它走
wp-config.php里的DB_HOST,但如果你设的是localhost,它可能走socket;稳妥起见改成127.0.0.1:3307 - 禅道:改
zentao\config\my.php里的$config->db->port字段
最容易被忽略的是SQL导入脚本、CI/CD配置、Docker Compose里硬编码的3306——这些地方不改,部署时照样连不上。











