mysql備份還原-基于binlog的增量備份還原

來源:本站原創 mysql_mariadb 超過251 views圍觀 0條評論

 

啟用binlog

vi my.cnf

log-bin=/var/lib/mysql/mysql-bin.log,如果是這樣的話log-bin=mysql-bin.log默認在datadir目錄下面

[[email protected] mysql]# ls |grep mysql-bin
mysql-bin.000001
mysql-bin.000002
mysql-bin.000003
mysql-bin.000004
mysql-bin.000005
mysql-bin.000006
mysql-bin.index

 

查看mysql-bin.000002這樣的文件里面到底是什么東西

[[email protected] mysql]# mysqlbinlog   /var/lib/mysql/mysql-bin.000002 > /tmp/add.sql

binlog增量備份和增量還原

1,增量備份

既然我們知道了,mysql里面新增加的數據在mysql-bin這樣的文件里面,我們只要把mysql-bin這樣的文件進行備份就可以了。

cp /var/lib/mysql/mysql-bin* /data/mysql_newbak/

 

我們現在要結合Binlog來恢復,但前提要找出誤操作前的pos點

 

通過事件的位置來恢復(不完全恢復)

 

  1. [[email protected] ~]# mysqlbinlog -v –base64-output=DECODE-ROWS localhost-bin.000002 |grep -C 10 -i "drop database"

  2. ### INSERT INTO `xuanzhi`.`tb1`

  3. ### SET

  4. ### @1=5

  5. ### @2=’ee’

  6. # at 290

  7. #170327 21:10:55 server id 1313306 end_log_pos 321 CRC32 0x825a2f99 Xid = 78

  8. COMMIT/*!*/;

  9. # at 321  <–開始

  10. #170327 21:19:25 server id 1313306 end_log_pos 422   <–結束點 CRC32 0x8c139cac Query thread_id=2 exec_time=0 error_code=0

  11. SET TIMESTAMP=1490620765/*!*/;

  12. drop database xuanzhi

 

上面的黃色加粗的就是,一個是start-position,一個是stop-position

 

從上面可以看到,誤操作前的pos點是321,那我們現在通過binlog來進行數據恢復:

  1. [[email protected] mysql-5.6]# mysqlbinlog –start-position=329 –stop-position=321 localhost-bin.000001 localhost-bin.000002 |mysql -uroot -p123456 xuanzhi

–start-position是備份后記錄下的pos點,

–stop-position是誤操前的pos點,

如果多個binlog文件,那么start-position是第一個binlog文件的pos點,stop-position是最后一個binlog的pos點

 

通過事件的時間來恢復(不完全恢復)

我們可以通過參數–start-datetime–stop-datetime指定恢復binlog日志的起止時間點,時間使用DATETIME格式。

    比如在時間點2005-04-20 10:00:00我們刪除掉一個庫,我們要恢復該時間點前的所有日志

[[email protected] /]# mysqlbinlog –stop-datetime="2005-04-20 9:59:59" /usr/local/mysql/data/binlog.123456 | mysql -u root

    我們可能幾個小時后才發現該錯誤,后面又有一系列的增刪查改等操作,我們還需要恢復后續的binlog,我們可以指定起始時間

 

組合

和基于時間點恢復類是,但是更加精確.因為同一時間點可能有多條SQL語句執行;

例:

#mysqlbinlog –start-date="2010-10-31 9:55:00"  –stop-date="2010-10-31 10:05:00" /usr/local/mysql/var/mysql-bin.000013 > /tmp/mysql_restore.sql

該命令將在/tmp/目錄下創建小的文件,編輯它找到錯誤語句前后的位置號,例如前后位置號分別是368312 和 368315

(2)恢復了以前的備份文件后,輸入

#mysqlbinlog –stop-position="368312" /usr/local/mysql/var/mysql-bin.000013 |mysql -uroot -p

#mysqlbinlog –start-position="368315" /usr/local/mysql/var/mysql-bin.000013 |mysql -uroot –p

 

總結:

        一、在恢復全備數據之前必須將該binlog文件移出,否則恢復過程中,會繼續寫入語句到binlog,最終導致增量恢復數據部分變得比較混亂

        二、做好數據文件及binlog的備份至關重要,但不是備份完就算了,要定期進行數據恢復測試或演練

        三、恢復時建議對外停止更新,即禁止更新數據庫

文章出自:CCIE那點事 http://www.qdxgqk.live/ 版權所有。本站文章除注明出處外,皆為作者原創文章,可自由引用,但請注明來源。 禁止全文轉載。
本文鏈接:http://www.qdxgqk.live/?p=4187轉載請注明轉自CCIE那點事
如果喜歡:點此訂閱本站
?
?
萌宠夺宝游戏 明星三缺一麻将官网 足彩胜负彩 淘股吧股票论坛电脑版类似淘股吧的其他论坛股票高手论坛 澳洲幸运10 广东11选择5开奖 15选5开奖结果同步 济南沐足潖江月有全套 湘潭酒店一条龙服务 股票配资公司销售好干吗 青海快3 11选5吉林 江西麻将怎么胡牌 最容易抽搐av演员 股票涨跌有哪些规律 河北省十一选五 双色最近60期走势图