Error number: MY-012521; Symbol: ER_IB_MSG_696; SQLSTATE: HY000
Message: Hex dump starting %llu bytes before and ending %llu bytes after the corrupted record:
错误说明
MySQL出现错误编号为MY-012521,Symbol为ER_IB_MSG_696,SQLSTATE为HY000的异常时,表示InnoDB内部检查失败或检测出系统表的损坏。它指的是MySQL内部的一种错误,仅影响InnoDB存储引擎,一般不对最终用户可见。
常见案例
该错误编号在MySQL社区出现比较少,一般见于系统表随着系统参数更改而错误索引失效时出现。如,在数据库调整tablespace时,因路径改动造成某个系统表损坏或者InnoDB内部检查失败,则会出现此错误。这种情况下,数据库会显示如下信息:
ERROR MY-012521 (ER_IB_MSG_696): Internal InnoDB check failed due to corrupt system tables or incorrect parameters
解决方法
1. 首先,检查系统表的完整性,并确认是否正确设置了参数。在尝试修复表后,建议优先检查文件系统的完整性,在检查系统表的时候,当系统表的行格式发生变化时,可以考虑导入一个新的备份系统表,如果实际操作起来偏麻烦,可以考虑重新安装MySQL服务,把数据原本已经存在的表重新进行导回。
2. 在尝试修复表后,检查是否真的被修复,如果未成功,则重启MySQL数据库。重启MySQL数据库后,尝试使用innocheck table_name 命令进行检查,如果仍然出现错误,则应该修复系统表。
3. 如果出现此错误,建议首先通过编辑my.cnf配置文件将innodb_force_recovery设置为6,然后重启MySQL数据库,这一步操作可以让MySQL忽略系统表的损坏,如果修复表后,将此参数设置为0,重新启动MySQL即可正常使用。