XAMPP本地MySQL卡顿主因是配置未适配低配机器:需修改XAMPP\mysql\bin\my.ini中[mysqld]段的innodb_buffer_pool_size(建议32M)、max_connections(建议30)、tmp_table_size与max_heap_table_size(均设16M),并改localhost为127.0.0.1连接,开启slow log定位慢查询。

XAMPP 本地开发卡顿,八成不是代码问题,而是 MySQL 配置没适配你的机器——尤其是内存不足时还沿用默认 innodb_buffer_pool_size,服务一启动就占 500MB+,PHP 请求直接卡在连接阶段。
为什么改了 my.ini 还没效果?确认配置文件路径和生效段落
XAMPP 只认 XAMPP\mysql\bin\my.ini,不是 C:\Windows\my.ini、也不是 my.cnf。很多“改了不生效”其实是改错了文件。
- 打开 XAMPP 控制面板 → 点击 MySQL 行的 Config → 选 my.ini,这才是真实路径
- 所有关键参数(如
innodb_buffer_pool_size)必须加在[mysqld]段落下方,不能写在[client]或文件末尾 - 改完后必须用控制面板先 Stop 再 Start MySQL;仅点击 “Restart” 有时不会重载配置
- 验证是否读取成功:进 phpMyAdmin 或命令行执行
SELECT @@config_file;,返回路径应与你修改的完全一致
低配机器(2GB 内存)必须调的三项内存参数
默认配置对低配机极不友好:innodb_buffer_pool_size 占 128M、max_connections 开 151 个、临时表上限又不统一——并发几个 PHP 请求就触发系统 swap,响应延迟飙升。
-
innodb_buffer_pool_size = 32M:设太高会常驻内存不释放,2GB 机器建议从 32M 起步;低于 16M 可能启动失败 -
max_connections = 30:默认 151 容易耗尽内存;PHP-FPM 开 5 个进程就可能占满,OOM 风险高 -
tmp_table_size = 16M和max_heap_table_size = 16M:二者必须严格相等,否则 MySQL 按小值生效;设高了反而让单个 GROUP BY 吃光内存
PHP 连 MySQL 卡在 localhost?换掉它
Windows 下用 localhost 连接 MySQL,PHP 会尝试走命名管道或 IPv6(::1),DNS 解析超时导致单次连接延迟 3–5 秒——这不是 MySQL 慢,是网络栈卡住。
- 把 PHP 里的
mysqli_connect('localhost', ...)全部改成mysqli_connect('127.0.0.1', ...) - PDO DSN 中也替换:把
host=localhost改为host=127.0.0.1 - 顺手检查系统
hosts文件(C:\Windows\System32\drivers\etc\hosts),确保只有127.0.0.1 localhost,注释掉::1 localhost
慢查询在哪?先开 slow log,别瞎调缓存
当前主流 XAMPP(MySQL ≥5.7.33)已彻底移除 query_cache_size,任何相关配置都无效,还会报 warning。真瓶颈往往藏在没走索引的查询里。
- 在
my.ini的[mysqld]下加:slow_query_log = ON long_query_time = 0.5 log_queries_not_using_indexes = ON slow_query_log_file = "D:/xampp/mysql/data/mysql-slow.log"
- 路径必须是绝对路径、目录可写;若
data目录下无mysql-slow.log文件,MySQL 可能静默失败 - 重启后手动触发:
SELECT SLEEP(2);,再检查日志文件是否生成对应记录 - 查出慢 SQL 后,用
EXPLAIN看执行计划,重点盯type=ALL和Extra里的Using temporary、Using filesort
最常被忽略的点:改完参数不验证是否生效,就以为“已经优化了”。务必连进 MySQL 执行 SHOW VARIABLES LIKE 'innodb_buffer_pool_size'; 和 SHOW STATUS LIKE 'Created_tmp_disk_tables';,用数字确认改动真实落地。



















