天天看點

MySQL資料恢複一例

新年伊始,各位友友們是否已經調整好狀态投入到工作中呢?昨天公司測試伺服器上MySQL發生事故,供mantis使用的庫因誤操作被覆寫掉,幸好使用N久前的完全備份及binlog日志恢複了。

恢複過程及指令記錄如下:

1、首先當然是恢複事故發生前的最近備份

# /usr/local/mysql/bin/mysqldump -uroot -p --all-databases < /mysql.sql

其中--all-databases比對所有庫,也可以指定某個庫或者表,如何使用看具體情況。mysql.sql是我的備份檔案,存放在根目錄下。

2、完全備份已經恢複,但還不夠,這個完全備份是一個月前的,近一個月的資料依然沒有。這部分資料要使用binlog日志進行恢複(幸好還有binlog日志)。

檢視一下binlog日志

# ll

……

-rw-rw----. 1 mysql mysql        264 1月  14 00:58 mysql-bin.000001

-rw-rw----. 1 mysql mysql        126 1月  14 01:04 mysql-bin.000002

-rw-rw----. 1 mysql mysql        107 1月  14 01:04 mysql-bin.000003

-rw-rw----. 1 mysql mysql        107 1月  14 01:21 mysql-bin.000004

-rw-rw----  1 mysql mysql        126 1月  14 01:58 mysql-bin.000005

-rw-rw----  1 mysql mysql  721170980 1月  14 02:45 mysql-bin.000006

-rw-rw----  1 mysql mysql    2915415 1月  22 20:58 mysql-bin.000007

-rw-rw----  1 mysql mysql   14988076 1月  28 01:59 mysql-bin.000008

-rw-rw----  1 mysql mysql     551013 2月  11 02:19 mysql-bin.000009

-rw-rw----  1 mysql mysql  741190125 2月  11 18:47 mysql-bin.000010

-rw-rw----. 1 mysql mysql        399 2月  12 16:34 mysql-bin.index

可以看到mysql-bin.000001的時間在mysql.sql的完全備份之後,事故發生的時間在mysql-bin.000009之後(如果要精确的定位事故可以檢視binlog日志通過字元偏移量來恢複,我這裡沒有這種需求,隻要一個大概的時間點就ok了)。

3、運作binlog日志進行恢複

# /usr/local/mysql/bin/mysqlbinlog \

> --stop-datetime="2014-02-11 02:19:00" \

> /usr/local/mysql/data/mysql-bin.000001 \

> | /usr/local/mysql/bin/mysql -uroot -p******

> /usr/local/mysql/data/mysql-bin.000009 \

繼續閱讀