innodb_additional_mem_pool_size 在 mysql 5.7+ 中已被正式移除,若配置文件中仍存在该参数,会导致启动警告甚至阻塞;必须从 my.ini 中彻底删除或注释该行,不可仅修改数值。

MySQL 5.7+ 的 innodb_additional_mem_pool_size 已被移除,别再配它
如果你在 XAMPP 启动 MySQL 时看到类似 Using innodb additional mem pool size 的报错,基本可以确定:你正在用 MySQL 5.7 或更高版本(XAMPP 7.2+ 默认带的就是),而配置里还留着已废弃的 innodb_additional_mem_pool_size 参数。这个参数早在 MySQL 5.6.3 就被标记为 deprecated,5.7.0 正式移除——写进去不仅无效,还会让 MySQL 启动时打 warning 日志,甚至阻塞启动。
实操建议:
- 打开
XAMPP\mysql\bin\my.ini,搜索innodb_additional_mem_pool_size - 整行删掉,或加
#注释掉(不能只改值,必须移除) - 如果这是你手动升级过 MySQL/MariaDB 导致的(比如替换了 bin 文件但没清理旧配置),更要检查是否混入了老版本的模板配置
启用 InnoDB 不是“开关问题”,而是确认它没被 skip-innodb 禁用
虽然 MySQL 5.5.5 起 InnoDB 就是默认引擎,但 XAMPP 某些老旧安装包(尤其 2012 年前的版本)或手动修改过的 my.ini 可能仍保留着 skip-innodb 这一行。只要它存在且未被注释,InnoDB 引擎根本不会加载,SHOW ENGINES 里就看不到 InnoDB,建表指定 ENGINE=InnoDB 会直接报错。
实操建议:
- 在
my.ini的[mysqld]段下搜索skip-innodb - 如果存在,确保它被完整注释掉:即前面有
#,形如#skip-innodb - 保存后必须重启 MySQL 服务,然后连进命令行或 phpMyAdmin 执行
SHOW ENGINES;,确认InnoDB行的Support列显示YES
innodb_buffer_pool_size 是唯一真要调的内存参数,低配机不调必卡
很多人以为改完引擎就能跑事务,结果一导入数据或并发稍高,MySQL 就假死、响应超慢,甚至被系统 kill。核心原因就是 innodb_buffer_pool_size 默认值太高(XAMPP 常设 128M 或 256M),而它是一块 MySQL 启动就独占、且几乎不释放的内存区域。2GB 内存的电脑上跑这个值,等于直接吃掉一半物理内存。
实操建议:
- 在
[mysqld]下设置innodb_buffer_pool_size = 32M(1GB~2GB 内存机器适用) - 若只做简单测试、表极少,可压到
16M;低于12M可能导致启动失败 - 不要设成百分比(如
50%),Windows 下 MySQL 不支持这种写法 - 改完必须重启服务,并用
SELECT @@innodb_buffer_pool_size;验证是否生效
事务生效的前提:表引擎是 InnoDB,且没被代码覆盖
即使 InnoDB 已启用、缓冲池调合理,BEGIN; INSERT; COMMIT; 依然不回滚?大概率是表本身不是 InnoDB。常见陷阱包括:
- 老项目安装脚本里建表写了
ENGINE=MyISAM,配置再怎么改也无效 - phpMyAdmin 导出 SQL 时勾选了“添加 CREATE TABLE 语句”,但没同步改引擎
- Laravel Migration 没显式调用
->engine('InnoDB'),依赖默认值(虽通常 OK,但不可靠)
实操建议:
- 查当前表引擎:
SELECT table_name, engine FROM information_schema.tables WHERE table_schema = 'your_db_name'; - 转单表:
ALTER TABLE users ENGINE=InnoDB;(大表加ALGORITHM=COPY, LOCK=NONE防锁死) - 批量检查项目代码,搜
CREATE TABLE和ENGINE=,把MyISAM全换成InnoDB(注意大小写统一)
真正容易被忽略的是:应用层建表逻辑比配置文件更优先。哪怕你把所有参数调得完美,只要某张表建的时候写了 ENGINE=MyISAM,它就永远不支持事务——这点没有商量余地。











