xampp中修改mysql端口需同步修改my.ini的[mysqld]和[client]段port值,并更新phpmyadmin的config.inc.php中$cfg['servers'][$i]['port'],再重启apache与mysql服务;项目连接字符串亦需手动更新端口号。

直接改 my.ini 里的两个 port 配置项,再重启 MySQL 服务,就生效了。但容易卡在“改了不生效”或“phpMyAdmin 连不上”,问题基本都出在配置位置、服务未重启、或 phpMyAdmin 仍连旧端口。
确认 XAMPP 中 MySQL 的配置文件路径
XAMPP 的 my.ini 不在 MySQL 安装目录,而在 XAMPP\mysql\bin\my.ini 或 XAMPP\mysql\my.ini(取决于版本)。常见错误是去系统盘找 my.cnf 或误改了其他 MySQL 实例的配置。
- 打开 XAMPP 控制面板 → 点击 MySQL 行右侧的
Config按钮 → 选择my.ini,这是最稳妥的方式 - 如果弹出的是空白或报错,说明该路径下没找到有效配置;此时检查
XAMPP\mysql\目录下是否存在my.ini,没有就新建一个(内容至少含[mysqld]和[client]段) - 不要修改
XAMPP\apache\bin\httpd.conf或 PHP 配置来“间接改 MySQL 端口”,那没用
改哪两处 port?为什么必须都改
my.ini 中必须同时修改 [client] 和 [mysqld] 下的 port 值,否则客户端工具(如命令行、phpMyAdmin)可能连得上,但本地程序(如 PHP mysqli_connect())会失败。
-
[mysqld]段的port=3306控制 MySQL 服务监听哪个端口 -
[client]段的port=3306是客户端默认连接端口;phpMyAdmin 启动时读取的就是这个值 - 如果只改
[mysqld],phpMyAdmin 会尝试连3306,而服务已监听3308→ 报错#2002 - No connection could be made because the target machine actively refused it. - 示例修改(改为
3308):[mysqld] port=3308 [client] port=3308
重启服务后 phpMyAdmin 还连不上?检查 Apache 配置
phpMyAdmin 是通过 Apache 的 PHP 脚本访问 MySQL 的,它本身不直读 my.ini,而是依赖 PHP 的 MySQL 扩展配置和自身设置。XAMPP 1.8.3+ 版本中,phpMyAdmin 默认从 config.inc.php 读端口,而非 my.ini。
- 打开
XAMPP\phpMyAdmin\config.inc.php - 搜索
$cfg['Servers'][$i]['port'],取消注释并设为新端口:$cfg['Servers'][$i]['port'] = '3308';
- 如果该行不存在或被注释掉,就在
$cfg['Servers'][$i]['host'] = '127.0.0.1';下方手动添加 - 改完保存,重启 Apache 和 MySQL 两个服务(顺序不重要,但必须都重启)
- 验证:浏览器访问
http://localhost/phpmyadmin/,登录后执行SHOW VARIABLES LIKE 'port';,返回值应为3308
端口改完但项目连不上?注意连接字符串硬编码
很多老项目(尤其 WordPress、ThinkPHP 早期模板)在配置文件里写死了 3306,改了 MySQL 端口后不改代码照样连不上。
- 检查项目中的数据库配置文件,例如:
wp-config.php里的DB_HOST,常见写法是'localhost:3306'或'127.0.0.1:3306' - 把
:3306改成:3308(注意冒号不能漏) - 如果用的是
localhost且没带端口,PHP 默认走 socket 连接(绕过 TCP),此时改端口无效;强制走 TCP 就写成127.0.0.1:3308 - 改完务必清空 PHP opcode 缓存(如 OPcache)或重启 Apache,否则旧配置可能还在内存里
真正麻烦的不是改端口本身,而是改完之后没人告诉你 phpMyAdmin 和项目配置是独立的两套逻辑——my.ini 管服务监听,config.inc.php 管 phpMyAdmin 连接,项目代码管自己连谁。三者不同步,就会反复出现“明明改了却连不上”的情况。











