如果mysql不小心操作失誤導致數據錯誤或者丟失這時候binlog起到了很大的作用
恢復有幾種方式
1.按時間恢復--start-datetime
如果確定了時間點,那么按時間恢復是一個再好不過的事,一般是通過日常的定期備份+差異備份(日志)
如果日常備份在4點,出錯的時間在12:00點,12:30發現的,首先我們要確認12點出了什么錯,12點以后的數據還能不能繼續使用,如果不影響,那么我們只需跳過12:00執行的數據即可
首先,恢復4點的備份
然后,通過binlog獲取4點到11:59的數據,獲取的數據可以直接作用到數據庫中,避免二次污染,最好先生成sql文件
mysqlbinlog --start-datetime="2014-11-07 04:01:00" --stop-datetime="2014-11-07 11:59:00" /data/mysql/data/mysql-bin.000020 >/home/madong/aa.sql
在獲取12:01-12:30的數據
mysqlbinlog --start-datetime="2014-11-07 12:01:00" --stop-datetime="2014-11-07 12:30:00" /data/mysql/data/mysql-bin.000020 >>/home/madong/aa.sql
最后通過mysql命令行
source /home/madong/aa.sql
如果12點以后的數據還不能繼續使用
那么我們只需要恢復到12點,12:00-12:30的數據就不需要恢復
2.通過--start-position節點
思路和上面的一樣,首先要確定節點的id,在恢復
例:
描述:2014-11-07 13:50 游戲數據庫數據全部清空
故障發現時間:13:50
故障發生時間:13:40左右
故障結束時間:15:55
恢復過程:
故障觸發,游戲馬上關服,進行維護,故障原因已知(數據沒了)
1.首先確認恢復時間點
恢復帶2014-11-07 13:30
2.因為剛開服不久,所以准備從最原始開始恢復,不從4點的完整備份節點恢復
准備不直接操作,先生成sql,
mysqlbinlog --start-datetime="2014-11-06 09:50:00" --stop-datetime="2014-11-07 13:30:00" /data/mysql/data/mysql-bin.000020 >/home/madong/aa.sql
(aa.sql 500M左右)
3.因數據庫重置之后又有玩家注冊,如果導入數據會出現主鍵沖突,所以再次清空數據庫(保留基表數據)
4.導入sql
進入mysql命令行,並切換數據庫(use DBNAME)
source /home/madong/aa.sql
執行開始時間14:57
結束時間15:54 大約一個小時
