xampp mysql在2gb内存电脑上需优化缓存配置:将my.ini中[mysqld]段的innodb_buffer_pool_size设为32m,tmp_table_size与max_heap_table_size均设为16m,禁用archive、blackhole、federated引擎,并删除已废弃的query_cache配置。

XAMPP 的 MySQL 默认缓存配置对低配电脑(比如 2GB 内存)极不友好,innodb_buffer_pool_size 动辄占掉 128MB~500MB,改错位置或设太高反而让服务启动失败、PHP 请求卡死甚至触发系统交换(swap)。必须改 my.ini 中的正确段落,且值要保守。
确认并修改 innodb_buffer_pool_size 的真实生效位置
XAMPP 的 MySQL 配置只认 XAMPP\mysql\bin\my.ini(不是 C:\Windows\my.ini 或其他路径),很多用户改错文件导致配置“没用”。该参数是 InnoDB 缓冲池大小,决定多少数据和索引能常驻内存——它不释放、不按需分配,设多大就占多大。
- 打开
XAMPP\mysql\bin\my.ini,定位到[mysqld]段落下方 - 添加或替换这一行:
innodb_buffer_pool_size = 32M(2GB 内存机器建议从 32M 起步;1GB 可试 16M,但低于 12M 可能启动报错) - 不要写成
innodb_buffer_pool_size = 32MB或带空格,单位只认M或K,不支持MB - 改完必须用 XAMPP 控制面板「Stop」再「Start」MySQL,或以管理员身份运行
net stop mysql && net start mysql
tmp_table_size 和 max_heap_table_size 必须严格相等
这两个参数控制内存临时表上限。MySQL 在执行 GROUP BY、ORDER BY 或含子查询的语句时会先尝试建内存临时表;一旦超限,就退化为磁盘临时表(On_disk_temp_table),性能断崖式下跌。但它们不共享逻辑——若值不同,MySQL 自动按较小值生效。
- 在
[mysqld]下统一设为:tmp_table_size = 16M和max_heap_table_size = 16M - 别照搬网上“设成 200M”的方案:那是给专用数据库服务器的,XAMPP 是本地开发环境,PHP 一次请求可能开多个连接,每连接都可能触发临时表
- 验证是否生效:
mysql -u root -e "SHOW VARIABLES LIKE 'tmp_table_size'; SHOW VARIABLES LIKE 'max_heap_table_size';"
禁用冗余存储引擎省下初始化内存
XAMPP 默认启用 ARCHIVE、BLACKHOLE、FEDERATED 等引擎,虽单个只占几百 KB,但加载时会注册结构体、分配元数据空间。对 1GB 内存机器,省下就是省下可调度资源。
- 在
[mysqld]下添加三行:skip-archive、skip-blackhole、skip-federated -
skip-xxx是禁用指令,不是注释;别写成disable-archive或漏掉skip- - 禁用后无法创建对应引擎的表(如
ENGINE=ARCHIVE),但日常开发几乎用不到;FEDERATED涉及远程表,本地调试完全无影响
别碰 query_cache_size:它在 MySQL 5.7+ 已移除
XAMPP 7.4+ 自带的 MySQL 版本(≥5.7.33)或 MariaDB(≥10.4)已彻底删除查询缓存模块。如果 my.ini 里还留着 query_cache_type = 1 或 query_cache_size = 16M,MySQL 启动时会忽略并输出 warning,但残留配置容易让人误判问题根源。
- 直接删掉这两行,或用
#注释掉 - 执行
SHOW VARIABLES LIKE 'have_query_cache';,结果一定是NO,不是DISABLED - 想加速重复查询?用应用层缓存(如 PHP 的 APCu)或 Redis,别指望这个已消失的功能
最易被忽略的一点:所有缓冲区参数(sort_buffer_size、read_buffer_size 等)都是**每连接独占**的。设成 512K 看似不大,但 max_connections = 151 时理论峰值就超 70MB——而 XAMPP 默认值恰恰是偏高的。调参不是越大越好,而是让总内存占用可控、可预测。











