Error number: MY-012958; Symbol: ER_IB_MSG_1133; SQLSTATE: HY000
Message: Small buffer pool size (%lluM), the flst_validate() debug function can cause a deadlock if the buffer pool fills up.
错误说明
MySQL错误代码MY-012958(ER_IB_MSG_1133)和SQLSTATE状态字符串HY000表示一种底层InnoDB引擎的错误。此错误的错误消息用于表示由此MySQL实例中的InnoDB引擎尝试意外地翻译一些数据时遇到的问题,该信息提示数据翻译过程中发生了错误。这些数据翻译可能是从先前被损坏的表格中向MySQL实例发布的,或者是由MySQL安装和初始化过程中产生的。
常见案例
典型的,此错误可以在当MySQL实例或用户尝试通过InnoDB引擎访问一些需要事务处理的表格时发生,以一个“Invalid transaction id”消息出现,或者在MySQL实例正在尝试恢复之前正在进行的事务时发生。也可能会遇到像”Transaction is incompatible
with certain types of queries”之类的内存翻译错误。 另一种情况是,当用户尝试创建或重建InnoDB表格文件时,此错误也可能出现在MySQL实例中。
解决方法
由于此MySQL错误与InnoDB翻译错误有关,因此关键步骤是分析InnoDB存储引擎是否对期望的表格或事务处理进行了有效的数据翻译。如果数据翻译是失败的,可以考虑运行MySQL CHECKSUM或ANALYZE TABLE命令以确定是否存在数据损坏。 同样,如果此错误是发布MySQL安装或初始化的过程中,可以考虑重新运行安装/初始化来解决此问题,或者使用预配置脚本重建期望的表格。
另外,如果错误是由于MySQL恢复期望分配事务而引起的,可以重启MySQL服务以完成此恢复操作,并确保用户可以更正任何由此产生的数据脏读和修改,即使用ROLLBACK 命令来清除尚未提交的改动。
最后,如果用户已经处理了上述所有可能的问题,但是当MySQL实例尝试翻译这些数据时仍然可以检测到此错误,则将不得不考虑使用FORCE RECOVERY或FORCE INNODB REBUILD FORCE模式来尝试修复MySQL实例中存在的任何相关损坏,但是在做出此类更改之前,建议先备份MySQL数据库。