应执行 select @@default_storage_engine; 或 show variables like 'default_storage_engine'; 确认当前默认引擎;mysql 8.0 默认为 innodb,但低版本或手动配置可能仍为 myisam;配置须写在 my.cnf 的 [mysqld] 段下,格式为 default_storage_engine = innodb,不可用已废弃的 default-table-type 或 storage_engine。

确认 MySQL 当前默认存储引擎
执行 SELECT @@default_storage_engine; 或 SHOW VARIABLES LIKE 'default_storage_engine';,8.0 默认就是 InnoDB,但部分低版本(如 5.6)或手动改过配置的实例可能仍是 MyISAM。别凭印象判断,先查。
在 my.cnf 的 [mysqld] 段落里加 default_storage_engine=InnoDB
这个参数必须写在 [mysqld] 下,写在 [client] 或 [mysql] 里完全无效。常见错误是复制了旧教程里的 default-table-type=InnoDB(已废弃)或拼成 default_storage_engine = innodb(值不区分大小写,但建议全大写保持可读性)。
- 正确写法:
default_storage_engine = InnoDB - 不要写
default_table_type—— MySQL 5.5+ 已移除 - 不要写
storage_engine = InnoDB—— 这是 5.1 时代的旧参数,5.5+ 不识别 - 如果已有
skip-myisam,可以保留,它能防止 MyISAM 表被意外创建,但不替代default_storage_engine
重启后验证是否生效且无冲突
改完保存,用 systemctl restart mysqld(CentOS/RHEL)或 systemctl restart mysql(Debian/Ubuntu)重启。注意:仅 mysqladmin reload 不会重载该参数。
- 重启后立即执行
SHOW VARIABLES LIKE 'default_storage_engine';,确认返回值是InnoDB - 建一张新表不指定 ENGINE:
CREATE TABLE test_default (id INT);,再查SHOW CREATE TABLE test_default;,看语句里是否隐含ENGINE=InnoDB - 如果启动失败,检查错误日志里有没有类似
unknown variable 'default_storage_engine'—— 那说明你用的是极老版本(
注意 InnoDB 引擎本身是否已启用
default_storage_engine 只是“默认选谁”,不代表 InnoDB 就一定能用。如果 SHOW ENGINES; 里 InnoDB 显示为 DISABLED 或 NO,那设了也白设。常见原因:
-
skip-innodb被写在了 my.cnf 里 —— 直接删掉这行 -
innodb_force_recovery > 0且值过高导致引擎拒绝加载 —— 临时调回 0 再试 - 磁盘空间不足或 ibdata1 损坏,导致 InnoDB 初始化失败 —— 查错误日志关键词
InnoDB initialization failed
真正容易被忽略的是:有些宝塔安装包或 Docker 镜像会默认关闭 InnoDB,只留 MyISAM;不检查 SHOW ENGINES; 就直接设默认引擎,结果新建表全是 MyISAM,还找不到原因。











