【发布时间】:2026-02-23 04:00:01
【问题描述】:
我最近尝试将我的 MySQL 服务器从 5.6 升级到 8.0。由于我们不能跳过主要版本,我首先将 5.6 升级到 5.7。升级过程花费了一段时间,但它是成功的(Windows 服务器操作系统,使用 zip 存档替换)。
但是在我用 8.0 二进制文件替换 5.7 并启动 mysql 服务后,它遇到了错误,我无法弄清楚是什么问题:
[System] [MY-011012] [Server] Starting upgrade of data directory.
[ERROR] [MY-013140] [Server] Unknown storage engine 'partition'
[ERROR] [MY-013140] [Server] Can't find file: '.\some_db\some_table.frm' (errno: 0 - No error)
[ERROR] [MY-013137] [Server] Can't find file: '.\some_db\some_table.frm' (OS errno: 0 - No error)
[ERROR] [MY-010348] [Server] Error in reading file .\some_db\some_table.frm
[ERROR] [MY-010758] [Server] Error in creating TABLE_SHARE from some_table.frm file.
我知道 mysql 8 不再支持服务器分区,但是“some_table”是一个带有 innodb 分区的表。它使用 Innodb 存储引擎。我不明白为什么错误显示“分区”存储引擎,以及无法找到 .frm 文件。有人遇到过类似的问题吗?
【问题讨论】:
-
执行升级时,必须转储并重新加载按 KEY 分区的表。使用 InnoDB 以外的存储引擎的分区表不能从 MySQL 5.7 或更早版本升级到 MySQL 8.0 或更高版本;您必须在升级之前使用 ALTER TABLE ... REMOVE PARTITIONING 从此类表中删除分区,或者使用 ALTER TABLE ... ENGINE=INNODB 将它们转换为 InnoDB。
-
是的,我阅读了这个条款,但是 mysql_upgrade 过程不完整。请参阅下面的答案,必须向每个分区表(InnoDB)发出额外的升级分区命令。
标签: mysql