innobackupex 備份恢復錯誤lsn 錯誤解決一例

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

相關文章
相關標籤/搜索