MySQL Error number: MY-012965; Symbol: ER_IB_MSG_1140; SQLSTATE: HY000

文档解释

Error number: MY-012965; Symbol: ER_IB_MSG_1140; SQLSTATE: HY000

Message: The log file may have been corrupt and it is possible that the log scan or parsing did not proceed far enough in recovery. Please run CHECK TABLE on your InnoDB tables to check that they are ok! It may be safest to recover your InnoDB database from a backup!

错误说明

MY-012965; ER_IB_MSG_RECOVERY_CORRUPT 是MySQL中出现的一个错误码,这个错误同样可以用SQLSTATE HY000来代表,以此来识别这个错误。相关的错误消息是“InnoDB 重构日志失败;请检查该库是否已经损坏”,用来告诉用户原因是日志文件损坏。

常见案例

这个错误码会出现在MySQL数据库引擎InnoDB出现的情况下,一般错误会出现在数据库重建过程中,好比MySQL引擎运行时写入失败,于是要将写入的日志保存在日志文件中,这样上次的记录就会保存,当MySQL重新启动时,就会用这些久的记录去更新一遍,而这些记录就是要保存在日志文件中,一旦这个日志文件损坏了,或者缺少部分,就会出现MY-012965; ER_IB_MSG_RECOVERY_CORRUPT这个错误。换句话说,就是在MySQL重新启动,当InnoDB重新加载日志时,MySQL是无法读取日志文件中的记录的,所以就会出现这个错误。

解决方法

考虑到这个错误是由于日志文件损坏造成的,MySQL 会提示用户此时的数据库可能已经损坏,因此唯一的解决方法就是去修复数据库。 首先尝试使用MySQL的 mysqlcheck 命令来修复数据库,选择修复 “–auto-repair” 选项,可以尝试修复数据库中的表和索引:m

mysqlcheck –auto-repair –databases 数据库名;

如果这条命令运行成功而且无错,则MySQL就会完美地回复,但如果还是出现同样的错误,则表明日志文件的损坏无法通过这种方式修复,这时候只能使用MySQL的innobackupex来备份原来的数据库,然后再重新建立一个新的数据库来替换原来的损坏的数据库:

innobackupex –user=”数据库用户名“,–password=”数据库密码” 要备份的文件路径

最后,还可以使用MySQL的 pt-archiver 命令来处理这种情况,pt-archiver 命令会在备份期间检查日志文件,同时保证数据一致性。

pt-archiver –source h=127.0.0.1,D=数据库名,t=要恢复的表名 –batch –progress time,30 –purge –txn-size 1000

如果上述解决方法都不能解决这个MY-012965; ER_IB_MSG_RECOVERY_CORRUPT 故障,只能采取更加极端的方式对数据库进行恢复,就是从数据库备份文件重新恢复数据库。

你可能感兴趣的