MySQL 8.0 启动时强制校验系统表引擎,只要 mysql.user 或 mysql.db 等任一为 MyISAM,即报 MY-010929 并终止初始化;因 MyISAM 不支持事务、undo/redo log,无法满足数据字典原子性、崩溃恢复及复制一致性要求,且 mysql_upgrade 已弃用,唯一可靠修复方式是 mysqld --upgrade=FORCE。

MySQL 8.0 启动时直接拒绝 MyISAM 系统表
不是配置没调对,而是服务启动阶段就硬性校验失败。只要 mysql.user、mysql.db 等系统表中任一仍为 MyISAM 引擎,mysqld 就会报 MY-010929 或 ER_UNKNOWN_STORAGE_ENGINE 并终止初始化——连日志都来不及写全,更别提加载其他库表。
MyISAM 根本不满足数据字典原子性要求
MySQL 8.0 把元数据统一存进 InnoDB,整套机制依赖事务保障:
- DDL 操作必须原子:CREATE USER + INSERT 权限记录要一起成功或一起回滚
- 崩溃后必须靠
redo log精确恢复元数据状态 - 权限变更(如
GRANT、角色赋权)需跨多张表写入,MyISAM 无undo log,中途宕机必然导致权限撕裂
MyISAM 没事务、没日志、状态不可预测,和这套架构天然冲突。
主从复制与高可用链路彻底失效
MySQL 8.0 默认 binlog_format=ROW,但 MyISAM 不支持行格式日志,复制链路被迫退化为 STATEMENT 模式:
解析 MySQL 8.0 的 DDL 脚本,并将表结构导出为 Excel 格式。适用于用户需将 MySQL 的 `CREATE TABLE` 语句转换为结构化的 Excel 文件场景,导出内容包含字段名、数据类型、长度及精度等信息。支持多张表的批量处理,每张表对应 Excel 中的一个独立工作表。适用于数据库文档编写、数据字典生成及模式分析等任务。
-
NOW()、UUID()、USER()在主从生成不同值,权限时间戳/令牌类字段主从不一致 - InnoDB Cluster 或 MHA 故障转移时,新主库检测到
mysql库含 MyISAM 表,部分 8.0.33+ 版本直接拒绝启动 -
read_only=ON对 MyISAM 无效:INSERT DELAYED和LOAD DATA INFILE仍可写入,破坏只读语义
官方已移除所有运维支撑能力
不是“不推荐”,是连基本维护工具都放弃了:
-
mysql_upgrade自 8.0.16 起 deprecated,8.0.33+ 默认跳过 MyISAM 表检查 -
mysqlcheck --repair对崩溃后的 MyISAM 系统表修复成功率极低,甚至可能损坏权限状态 -
mysqld --upgrade=FORCE是唯一能触发系统表转换的路径,但它只对系统表有效,业务表仍需手动处理
真正难缠的不是报错,而是那些没报错却行为异常的情况:比如转换中途被中断,mysql 库下部分表变 InnoDB、部分仍是 MyISAM,此时服务看似启动成功,但执行 CREATE USER 或权限操作时随机失败。










