innobackupex 备份恢复错误lsn 错误解决一例

使用innobackupex 备份数据库后,测试恢复。

恢复的时候报错如下:

140517 10:17:34  InnoDB: Error: page 0 log sequence number 11389633900

InnoDB: is in the future! Current system log sequence number 2386370804.

InnoDB: Your database may be corrupt or you may have copied the InnoDB

InnoDB: tablespace but not the InnoDB log files. See

InnoDB: http://dev.mysql.com/doc/refman/5.5/en/forcing-innodb-recovery.html

InnoDB: for more information.

无法恢复,在my.cnf中加入:

innodb_force_recovery = 4

innodb_purge_thread = 0

在用--apply-log  恢复redo log 可以,但是启动的时候还是报如上错误,lsn 无法对齐。

在 http://dba.stackexchange.com/questions/8011/any-better-way-out-of-mysql-innodb-log-in-the-future 找到一解决方案。如下:

vi junk.pl

#!/usr/bin/perl

use DBI;

$table = shift || die;

$dbh = DBI->connect("DBI:mysql:junk:host=localhost", "root", "password"); #Edit "junk" (DB name), user, and pass to suit.

$dbh->do("DROP TABLE IF EXISTS $table");

$dbh->do("CREATE TABLE $table (str TEXT) ENGINE=INNODB");

$sth = $dbh->prepare("INSERT INTO $table (str) VALUES (REPEAT(?,100000))");

foreach (1..50) {  ###因为我的日志差距比较大,调整到500000000

$sth->execute('0123456789');   

}

$dbh->do("DELETE FROM $table");


mysql> create database junk;

mysql>exit

perl junk.pl data1 ##建一张data1表插入数据

perl junk.pl data2 ##建一张data2 表插入数据

perl junk.pl data3 ##建一张data3 表插入数据

起三个进成同时跑,如果不够,可以再起一个。最后插入了接近40G的数据,终于追赶上了lsn。


查看lsn 变化:

 echo "SHOW engine INNODB STATUS \G" | mysql -S /tmp/mysql.sock -uroot -p'' | grep '^Log seq'

等大于11389633900 后结束掉 perl junk.pl ,然后重启mysql 一切正常。世界又安静了。


        后记:这个错误我在恢复其他数据库的时候没有任何问题。唯独另外一个环境的db备份恢复就会有问题,我试着用mysqldump 导出备份,结果报错,一些视图说root 用户没有权限。奇诡的问题,root 怎么怎么没有权限呢?再观察测试一下。

你可能感兴趣的:(innobackupex 备份恢复错误lsn 错误解决一例)