使用innobackupex 备份数据库后,测试恢复。html
恢复的时候报错以下:mysql
140517 10:17:34 InnoDB: Error: page 0 log sequence number 11389633900sql
InnoDB: is in the future! Current system log sequence number 2386370804.数据库
InnoDB: Your database may be corrupt or you may have copied the InnoDBapp
InnoDB: tablespace but not the InnoDB log files. See测试
InnoDB: http://dev.mysql.com/doc/refman/5.5/en/forcing-innodb-recovery.htmlui
InnoDB: for more information.spa
没法恢复,在my.cnf中加入:日志
innodb_force_recovery = 4orm
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 怎么怎么没有权限呢?再观察测试一下。