InnoDB日志文件不按顺序 - 我怎么能把它们炸掉?

时间:2014-01-28 03:37:59

标签: mysql innodb

我有一个在VPS上运行的MySQL实例今天意外关机(物理机重启)。当它恢复时,我有一个MySQL错误日志,里面装满了这样的消息:

140127 17:49:18  InnoDB: Error: page 1846 log sequence number 8869575607
InnoDB: is in the future! Current system log sequence number 8869400472

我尝试使用innodb_force_recovery = 6重新启动服务器(4不起作用)。这使实例备份。但是,没有任何表修复允许我在没有innodb_force_recovery = 6的情况下运行。

我的理解是InnoDB是事务性的,非提交的写入存在于这些日志文件中。我不关心这些写作。我只想让我所谓的“交易”数据库重新启动。

是否可以删除所有日志并将我的数据库移至先前的良好状态?

1 个答案:

答案 0 :(得分:0)

如果你在重新启动后遇到这个错误,这意味着你所谓的“服务器”VPS根本就不是服务器,实际上是一个吃掉你数据的巨魔。或者更严重的是,这与InnoDB“被假定为”“事务性”无关,就像它运行的基础系统一样,关于它是否实际保存了您的数据。

它抱怨的日志不是非事务性数据的日志,它们实际上是InnoDB使用的主要事务机制。接受数据,保证在提交时写入日志,然后根据需要刷新到磁盘上的数据页。如果日志写入或刷新实际上没有按原样进入磁盘,InnoDB可能无法在崩溃后恢复,如您所见。

您最好的选择是启动innodb_force_recovery设置为允许其运行的任何设置,使用mysqldump转储数据,然后将其重新加载到完全干净的实例中。如果你处于一个状态不好的状态,只是“修复”实例以便它继续运行将不够好。您需要重新初始化所有数据结构。并找到一个新的主人。