Error number: MY-011983; Symbol: ER_IB_MSG_158; SQLSTATE: HY000
Message: %s
错误说明
ER_IB_MSG_158 错误是由 MySQL 引擎发出的一个内部错误,属于 InnoDB 消息池错误,代码为 MY-011983,MySQL 的 SQLSTATE 状态码为 HY000。这个错误指出一个影响事务的错误,发生在执行 ROLLBACK 命令的期间,通常是 InnoDB undo log 中的事务状态与实际事务状态相混淆所造成。
常见案例
出现这个错误时,MySQL 进程正在回滚一个事务,然而undo log 消息池中保存的事务状态与实际状态存在不匹配,这种情况通常是由于 MySQL 写出日志到磁盘之前,事务中的状态已经更新,而 MySQL 由于系统崩溃,无法将日志保存到磁盘中,或者强制中断客户端的某个事务。出现这个错误通常意味着 MySQL 内部状态已经受损,继续操作可能会导致不可预料的数据损失。
解决方法
由于这个错误指出 MySQL 内部状态已经受损,解决这个问题的最佳解决方法是使用与出现错误之前进行事务处理时相同的版本重新安装 MySQL,并重启全部 MySQL 服务。 MyISAM 表会恢复,但事务处理表要求将事务后的变化重新应用。此外,您可以使用 mysqldump 加载备份,压缩的 InnoDB 表还原其状态(最好使用 mysqldump 导出实例,而不是多设备恢复)。您首先需要将出现 ER_IB_MSG_158 错误的 MySQL 服务停止,然后把 mysqldump 导出的文件重新加载数据到新的实例中,最后重启 MySQL 。