MySQL Error number: MY-013037; Symbol: ER_IB_MSG_1212; SQLSTATE: HY000 报错 故障修复 远程处理
文档解释
Error number: MY-013037; Symbol: ER_IB_MSG_1212; SQLSTATE: HY000
Message: %s
错误 ER_IB_MSG_1212 的 MySQL 是一个检查错误,表明表体(data file body)中有不兼容的记录值。它对应于InnoDB 存储引擎,是 MyISAM 和 CSV 存储引擎无法报出此错误的原因。
错误说明
ER_IB_MSG_1212 错误是 InnoDB 存储引擎报出来的,表示数据库表体或表围中有不兼容的记录值。其中很大一部分情况下,表中尝试新建的记录可能不匹配表的定义,此时会报出 ER_IB_MSG_1212 错误,此错误表明 InnoDB 无法解决与此错误有关的问题。
常见案例
ER_IB_MSG_1212 错误通常会出现在 INSERT/UPDATE 时,情况如下:
1)尝试用不适当的记录操作已存在的表时,ER_IB_MSG_1212 错误会被抛出。
2)存储空间短缺,把一个太大的值存下来时,会抛出 ER_IB_MSG_1212 错误。
3)检查表定义,如果发现表字段被解释有误,这将抛出 ER_IB_MSG_1212 错误。
4)在受 InnoDB 真正引用的索引字段上改变外键定义时,可能会抛出 ER_IB_MSG_1212 错误。
解决方法
1)应用批量操作,即把一个或多个语句放到一个事务中,确保事务中所有语句都能被执行成功,从而停止 ER_IB_MSG_1212 错误抛出。
2)使用唯一索引,将 LOG_ERROR 和 LOG_WARNING 的 allow_duplicate_values 使用默认值,此值应该设置为 false。
3)检查 innodb_file_per_table 变量是否被设置正确,此变量可确保在表重命名移动过程中,旧表和新表字段相同。
4)限制表中的记录长度,从而把 超出限制的二进制文件及时剔除。
5)检查 SHOW CREATE TABLE 语句,确保表格定义没有改变。
6)运行 ANALYZE TABLE 语句来更新表的索引统计信息。
7)删除一条或多条不合规的记录,此可以减少报出 ER_IB_MSG_1212 错误的可能性。
8)当在真实环境中不可想象地出现ER_IB_MSG_1212 错误时,建议备份当前数据库,再使用 MySQL ROW 格式对表进行导出和导入后,确保表被重建而不会被覆盖。