MySQL 8.0未指定引擎时默认使用InnoDB,这是内核强制行为,不可通过配置或命令行修改,系统表、ACL和原子DDL均依赖其运行。

查 default_storage_engine 是否真为 InnoDB
别信“8.0 默认就是 InnoDB”这种印象,很多宝塔、Docker 镜像或低版本迁移上来的实例仍可能默认是 MyISAM。直接执行:SELECT @@default_storage_engine; 或 SHOW VARIABLES LIKE 'default_storage_engine';。返回值必须是 InnoDB,不是 innodb(小写)或空值。如果返回 MyISAM,说明 my.cnf 里没配对,或者配置没加载成功。
建表不带 ENGINE=,看实际创建语句
这是最实锤的验证方式:执行 CREATE TABLE test_verify (id INT);,然后立刻查:SHOW CREATE TABLE test_verify;。结果里必须明确出现 ENGINE=InnoDB —— 注意不是靠 SHOW TABLE STATUS 的 Engine 列(它只显示当前引擎,不反映“是否走默认”)。如果看到的是 ENGINE=MyISAM,哪怕 @@default_storage_engine 显示正确,也说明配置被覆盖或未生效(比如表空间级配置、SQL_MODE 影响等)。
确认 innodb_buffer_pool_size 真正分配了多少
这个参数改了不等于就用上了。先查配置值:SHOW VARIABLES LIKE 'innodb_buffer_pool_size';,再查运行时实际大小:SHOW STATUS LIKE 'Innodb_buffer_pool_bytes_data';(注意是 bytes_data,不是 _size)。两者应接近(允许几百 MB 差异)。如果 SHOW VARIABLES 显示 6G,但 bytes_data 只有 128M,说明缓冲池根本没加载成功——常见原因是 skip-innodb 存在、innodb_force_recovery > 0、或磁盘空间不足导致初始化失败。此时必须看错误日志里有没有 InnoDB initialization failed。
检查 SHOW ENGINES; 里 InnoDB 状态是否为 YES
SHOW ENGINES; 是最终兜底判断。找到 InnoDB 行,看 SUPPORT 列是不是 YES。如果是 DISABLED 或 NO,那所有 InnoDB 相关参数都白设。重点排查:my.cnf 中是否误写了 skip-innodb(直接删掉)、innodb_force_recovery 是否非零(临时设为 0)、以及错误日志中是否有 Cannot open or create data files 类提示——这往往指向 ibdata1 损坏或磁盘满。
default_storage_engine 写在 [client] 段),也不会主动告诉你 InnoDB 因依赖缺失而静默禁用。验证必须落到具体行为(建表结果、缓冲池字节数、引擎支持状态),不能只看配置文件和变量值。


















