Error number: MY-012972; Symbol: ER_IB_MSG_1147; SQLSTATE: HY000
Message: Tablespace size stored in header is %lu pages, but the sum of data file sizes is %lu pages
错误说明
ER_IB_MSG_1147 代表不兼容的InnoDB表配置参数出现了更改,导致InnoDB表出现故障。若出现该问题,MySQL就会抛出一条错误消息,该错误消息为:ER_IB_MSG_1147:Incompatible key or row definition between the MariaDB .frm file and the InnoDB data dictionary.
常见案例
1. 一些在MySQL数据库中,添加,删除,修改表或字段时会导致ER_IB_MSG_1147错误,如对表添加或修改索引;
2. 升级InnoDB引擎时出现ER_IB_MSG_1147错误,可能是升级后使用新的引擎定义时发生冲突;
3. 语句中明明参照的表没有更改,但是多次执行同样语句出现了ER_IB_MSG_1147错误,可能是字段数据类型依然发生了冲突引起。
解决方法
1. 在MySQL数据库中对表的添加、删除或修改操作时,应该充分考虑兼容性,在改变表定义时,应以MyISAM操作解决 ER_IB_MSG_1147 错误;
2. 检查数据库表是否存在记录,若不存在记录则需先建立记录,再检查是否出现ER_IB_MSG_1147 错误;
3. 在升级InnoDB引擎前,需先彻底检查表的完整性,使其达到MySQL推荐的完整性标准,否则在升级后可能会出现ER_IB_MSG_1147 错误;
4. 在数据库迁移时,应先检查使用是否兼容MySQL 规定的数据库列定义,避免多次重复执行语句出现 ER_IB_MSG_1147 错误;
5. 另外,MySQL也提供了REPAIR TABLE命令可以自动修复出现ER_IB_MSG_1147 错误的表结构,但在操作MySQLREPAIR TABLE命令前,建议备份表结构或者整个数据库,防止意外发生回滚问题。