使用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 怎麼怎麼沒有權限呢?再觀察測試一下。