MySQL启动占500MB+主因是innodb_buffer_pool_size默认过高,低配机应调至32M或16M;禁用ARCHIVE等冗余引擎;max_connections设为30并调低各缓冲区;删掉已废弃的query_cache配置;修改后须以管理员身份重启服务。

MySQL 启动就占 500MB+?关掉 innodb_buffer_pool_size 的默认值
XAMPP 默认把 innodb_buffer_pool_size 设为 128M(Windows)或更高,但低配电脑(比如 2GB 内存)根本吃不消。InnoDB 缓冲池会常驻内存,且 MySQL 不会主动释放——哪怕你只建了 3 张小表,它也照占不误。
实操建议:
- 打开 XAMPP\mysql\bin\my.ini(不是 my.cnf)
- 找到 [mysqld] 段落,添加或修改这一行:
innodb_buffer_pool_size = 32M
- 如果几乎不用 InnoDB(比如只跑 WordPress 的老版本或纯 MyISAM 表),可进一步压到 16M;但低于 12M 可能触发启动失败
- 修改后必须重启 MySQL 服务,net start mysql 或用 XAMPP 控制面板操作
禁用不用的存储引擎,避免加载冗余模块
默认 XAMPP 启用了 ARCHIVE、BLACKHOLE、FEDERATED 等引擎,它们虽不占大内存,但会消耗初始化资源和少量常驻内存,对 1GB 内存机器是能省则省。
实操建议:
- 在 my.ini 的 [mysqld] 下添加:
skip-archive<br>skip-blackhole<br>skip-federated
- skip-xxx 是禁用指令,不是注释;不要写成 disable-xxx 或漏掉 skip-
- 注意:禁用 FEDERATED 不影响本地开发;禁用 ARCHIVE 后无法创建 ARCHIVE 表,但极少有人用
调低连接数和临时表内存,防止并发一高就 OOM
默认 max_connections = 151,每个连接至少分配几十 KB 内存;低配机开 5 个 PHP 请求就可能触发交换(swap),响应变卡甚至 MySQL 崩溃。
实操建议:
- 在 [mysqld] 中设置:
max_connections = 30<br>sort_buffer_size = 64K<br>read_buffer_size = 64K<br>tmp_table_size = 16M<br>max_heap_table_size = 16M
- sort_buffer_size 和 read_buffer_size 是**每连接独占**的,设太高反而加速内存耗尽
- tmp_table_size 和 max_heap_table_size 必须相等,否则 MySQL 会按较小值生效
- 这些值改完后,用 SHOW VARIABLES LIKE 'max_connections'; 连进 MySQL 验证是否生效
别碰 query_cache——它在 MySQL 5.7+ 已废弃,XAMPP 7.4+ 默认关了但配置里还留着
很多教程还在教调 query_cache_size,但 XAMPP 自带的 MySQL 5.7.33+ 或 MariaDB 10.4+ 已彻底移除查询缓存。如果 my.ini 里还留着 query_cache_type = 1 和 query_cache_size = 16M,MySQL 启动时会忽略并报 warning,但配置残留会干扰判断。
实操建议:
- 搜索 my.ini 全文,删掉所有以 query_cache_ 开头的行
- 如果删完重启报错,说明你用的是极老版 XAMPP(如 1.7.x),那就设 query_cache_size = 0,而不是留着 16M 占位
- 真正该关注的是 innodb_log_file_size——它影响崩溃恢复速度,但对内存占用无直接影响,别被名字误导
改完配置最易忽略的一点:XAMPP 控制面板有时不会实时读取 my.ini 修改,尤其是你用记事本保存后没以管理员身份运行。务必右键“XAMPP Control Panel” → “以管理员身份运行”,再点 Stop/Start MySQL。










