Error number: MY-012810; Symbol: ER_IB_MSG_985; SQLSTATE: HY000
Message: %s
错误说明
ER_IB_MSG_985 错误代号表示 MySQL 在处理索引缓冲区(InnoDB)时出错。相关的错误字符串及信息是“Error: Checksum mismatch (expected %lu, calculated %lu)”。这是一个由 MySQL 内部索引缓冲区机制产生的错误。
常见案例
ER_IB_MSG_985 错误出现在满足以下条件任何一个条件时:
1. 外部恢复(备份恢复)正在读取索引文件时失败,出现 checksum 校验失败。
2. 当重建索引段时,由于索引段文件本身损坏或被破坏,而导致索引段创建失败,或者索引段修复失败,这样就会出现 ER_IB_MSG_985 错误。
3. 执行 UPDATE 或者 INSERT 操作时,对于索引段有一个更新操作,但是对应的索引页写入失败,可能是由于硬盘写满未做分区,磁盘卡,或者网络中断等情况,导致此时系统无法写入索引文件,最终出现 ER_IB_MSG_985 错误。
4. 执行 UPDATE 或者 INSERT 操作时,对索引不止有一项更新操作,但是其中的一项更新操作失败,导致索引段创建失败,导致了操作失败,这时会出现 ER_IB_MSG_985 错误。
解决方法
1. 一旦出现 ER_IB_MSG_985 错误,log 中就会显示出相关的报错信息,通过信息分析可以定位到报错文件。
2. 检查容量是否已经不够,如果确定不够的话,可以增加硬盘空间,同时增加新的磁盘分区。
3. 在 MySQL 当前安装目录 Ordata 下增加新的索引文件,如果存在多个文件,可以尝试将其中一个文件移动到其他位置,重新使用 MySQL 将索引恢复,如果没有问题可以使用移动的文件覆盖。
4. 尝试增加事务日志大小并控制并发操作,以避免出现此错误。
5. 如果重建索引段失败,建议重新建立一个表,并对其分区数据进行恢复,然后重新创建索引,以避免出现此错误。