MySQL服务启动但连接失败,需确认端口配置是否全局生效:XAMPP中改my.ini的port=3307后,PHP、phpMyAdmin及命令行客户端仍默认连3306,须分别在mysql -P 3307、phpMyAdmin config.inc.php或libraries/config.default.php、mysqli_connect('127.0.0.1',...,3307)中显式指定端口,并确保my.ini的[mysqld]段正确且无残留进程。

MySQL服务启动但连接失败,先确认端口是否真被改对了
改完 my.ini 里的 port=3307,不代表所有地方都同步更新了。XAMPP 启动 MySQL 时读的是 my.ini,但 PHP、phpMyAdmin、命令行客户端这些“使用者”默认仍连 3306,不手动指定就会报 mysqli_real_connect(): (HY000/2002) 或直接超时。
验证方式很简单:打开 XAMPP 控制面板,点击 MySQL 行末的 Shell,输入:
mysql -u root -P 3307 -e "SELECT VERSION();"
注意是大写 -P(端口),不是小写 -p(密码)。如果这句能返回版本号,说明 MySQL 确实监听在 3307;如果报错 Can't connect to local MySQL server,那大概率是 my.ini 没生效,或改错了位置(比如改了注释行、改了 [client] 段却漏了 [mysqld] 段)。
phpMyAdmin 连不上,重点改这两个配置项
phpMyAdmin 不会自动读取 my.ini,它靠自己配置文件里的显式声明。常见错误是只改了 config.inc.php 的 host,却忘了 port 字段,或者改了 config.inc.php 却没改 libraries/config.default.php —— 新版 XAMPP(尤其是 8.0+)会优先读后者。
-
$cfg['Servers'][$i]['host'] = '127.0.0.1';→ 改成'127.0.0.1:3307'(冒号拼接,不是加引号包住整个字符串) -
$cfg['Servers'][$i]['port'] = '';→ 改成$cfg['Servers'][$i]['port'] = '3307'; - 如果启用了密码认证,还要检查
$cfg['Servers'][$i]['password'] = '';是否为空,或是否和你实际设置的 root 密码一致
改完别忘了重启 Apache(phpMyAdmin 依赖它),不是只重启 MySQL。
PHP 脚本连接失败,mysqli_connect() 必须显式传端口
PHP 默认不读系统 MySQL 配置,mysqli_connect('localhost', ...) 会走 socket(Linux/macOS)或尝试 3306(Windows),不会自动 fallback 到 my.ini 的端口。所以必须把端口作为第四个参数传进去:
解析 MySQL 8.0 的 DDL 脚本,并将表结构导出为 Excel 格式。适用于用户需将 MySQL 的 `CREATE TABLE` 语句转换为结构化的 Excel 文件场景,导出内容包含字段名、数据类型、长度及精度等信息。支持多张表的批量处理,每张表对应 Excel 中的一个独立工作表。适用于数据库文档编写、数据字典生成及模式分析等任务。
$conn = mysqli_connect('127.0.0.1', 'root', '', 'testdb', 3307);
注意:localhost 和 127.0.0.1 在 MySQL 中行为不同——前者强制走 socket,后者才走 TCP/IP。所以这里必须用 127.0.0.1,否则即使端口写对了也连不上。
如果你用 PDO,DSN 里也要明确写端口:
$dsn = 'mysql:host=127.0.0.1;port=3307;dbname=testdb';
端口改了但服务根本没起来?检查 my.ini 的 [mysqld] 段落是否完整
很多人只改了 port,却忽略了 my.ini 里可能有多个 [mysqld] 块(尤其重装过 XAMPP 或手动合并过配置),而 MySQL 只认第一个有效块。最稳妥的做法是:
- 用记事本打开
C:\xampp\mysql\bin\my.ini(路径以你实际安装为准) - 搜索
[mysqld],找到第一个非注释的块 - 确认该块下有且仅有这一行
port=3307(不要留空格、不要带分号、不要写成PORT=3307) - 顺手检查
basedir和datadir路径是否指向C:\xampp\mysql,路径错也会静默失败
改完保存,关闭所有 CMD/Shell 窗口,再点 XAMPP 的 Start —— 不要跳过这一步,旧进程可能还占着端口。
最容易被忽略的一点:Windows 下杀 MySQL 进程不彻底。哪怕 XAMPP 显示 MySQL 已 Stop,任务管理器里可能还有残留的 mysqld.exe。务必手动结束,否则新实例启动时会因端口被占而失败,但控制面板未必报红字。

















