执行 show engines; 可查看mysql所有存储引擎状态,support列中yes表示启用、default为当前默认、no为未编译或禁用、disabled为编译但启动时关闭;仅show variables或select @@default_storage_engine无法反映其他引擎可用性。

查看当前MySQL支持的引擎列表
直接执行 SHOW ENGINES; 就能看到所有已加载、可用的存储引擎及其状态。重点看 SUPPORT 列:值为 YES 表示默认启用,DEFAULT 表示当前默认引擎,NO 表示未编译或被禁用,DISABLED 表示编译了但启动时被关掉了。
常见错误是只跑 SHOW VARIABLES LIKE 'storage_engine'; 或 SELECT @@default_storage_engine; —— 这俩只返回当前默认值,完全不反映其他引擎是否可用。
- 在 MySQL 8.0+ 中,
MyISAM引擎默认仍存在但处于DISABLED状态(除非显式启用) -
InnoDB几乎总是DEFAULT;MEMORY一般为YES;CSV、ARCHIVE等小众引擎可能为NO,取决于发行版编译选项 - 某些云数据库(如阿里云 RDS、腾讯云 CDB)会主动禁用
FEDERATED、BLACKHOLE等引擎,SUPPORT显示NO是正常现象,不是你配错了
确认某个引擎是否真的能建表
SHOW ENGINES; 显示 YES 或 DEFAULT 只代表插件加载成功,不代表你能立刻用它建表。比如 MyISAM 在 MySQL 8.0.23+ 默认被禁用,即使显示 DISABLED,你执行 CREATE TABLE t1 (...) ENGINE=MyISAM; 会直接报错:ERROR 1286 (42000): Unknown storage engine 'MyISAM'。
- 最稳妥的验证方式是当场试建一张最小表:
CREATE TABLE tmp_test (id INT) ENGINE=<em>引擎名</em>;,然后DROP TABLE tmp_test; -
INFORMATION_SCHEMA.ENGINES视图内容和SHOW ENGINES一致,没必要额外查——它只是个只读视图,不能帮你判断运行时可用性 - 如果遇到
Unknown storage engine错误,别急着改配置,先确认 MySQL 版本是否原生移除了该引擎(例如 Percona Server 某些精简版会剔除EXAMPLE引擎)
启用被 DISABLED 的引擎(以 MyISAM 为例)
MySQL 启动时可通过配置项重新激活部分 DISABLED 引擎,但不是所有引擎都支持运行时开启。以 MyISAM 为例,它属于服务端内置引擎,只要没被编译剔除,加一行配置就能用:
在 my.cnf 的 [mysqld] 段落下添加:loose-skip-innodb=OFF 和 default-storage-engine=MyISAM 并不足以启用 MyISAM;真正起效的是确保没加 skip-myisam,且最好显式写上:plugin-load-add=myisampk.so(Linux)或 plugin-load-add=myisampk.dll(Windows)——不过现代 MySQL 通常自动加载,多数情况只需删掉配置里可能存在的 skip-myisam。
- 修改配置后必须重启 mysqld,
SET GLOBAL类命令无法动态启用引擎插件 -
plugin-load-add路径必须准确;路径错、文件缺、权限不对都会导致启动失败,错误日志里会出现类似Plugin 'myisampk' init function returned error -
FEDERATED引擎更麻烦:需同时设federated=ON(5.7)或loose-federated=ON(8.0),且依赖 libcurl,某些容器镜像里根本没装依赖库
不同版本/发行版的典型差异
官方 MySQL 社区版、Percona Server、MariaDB、云厂商托管版之间,引擎支持差别不小。比如 MariaDB 已彻底移除 MyISAM 的核心地位,主推 Aria;而 MySQL 8.4 开始实验性引入 Clone 插件,但它不是存储引擎,别跟 SHOW ENGINES 混在一起查。
- MySQL 5.7:默认含
MyISAM、CSV、ARCHIVE、BLACKHOLE,FEDERATED需手动开启 - MySQL 8.0.23+:
MyISAM默认DISABLED,8.4 中进一步弱化其文档地位 - 阿里云 RDS MySQL 8.0:
MyISAM、FEDERATED、EXAMPLE全部NO,连plugin表都查不到对应记录 - 检查前先执行
SELECT VERSION();,版本号决定你能指望哪些引擎存在
引擎不是越多越好,真正需要的往往就一两个。别在生产环境为了“支持列表全”去硬启冷门引擎,加载失败或隐式降级反而更容易出问题。











