新年伊始,各位友友們是否已經調整好狀态投入到工作中呢?昨天公司測試伺服器上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 \ |