mysql通過binlog進行增量備份

在備份mysql數據的時候,可能會遇到數據基數很大的情況,如果每天都備份整個全庫,將會耗費很大的資源,這個時候就可以通過binlog進行增量備份,每天記錄一個breakpoint,備份的時候從前一天breakpoint往後進行增量備份就可以了。還有一種情況也可以用到增量備份,那就是在線遷移數據的時候,在不停服務的情況下遷移全庫數據就可以採用增量備份補充增量數據。

通過binlog進行增量備份時如果不需要過濾特定的database和table就可以直接通過mysql自帶的master/slave機制來進行增量備份。如果需要過濾出特定的database或者table,那麼就需要自己寫代碼過濾binlog。下面就來說說怎麼進行binlog的過濾和增量備份。

1.使用%MYSQL_HOME%/bin/mysqlbinlog工具將binlog的二進制文件解析成文本,可以寫到硬盤上或者放到管道里。

2.需要一個binlog的過濾程序對文本的binlog進行過濾,過濾的目的是找出特定的database和table的sql語句。

3.在過濾的時候不能按行進行grep,因爲可能有一個sql語句在多個行,這時可以通過分隔符“;”來進行劃分,這裏要注意的是要先將註釋去掉,因爲註釋中很有可能含有“;”(mysql的註釋包括/*,#和--),還要注意字符串中的“;”也不能算進來(處理字符串的時候要注意雙引號的轉義)。

4.將sql逐條進行過濾,這裏同樣需要一些關於字符串的處理,這裏要注意的是,use語句的上下文環境,這個將決定sql所對應的database,然後將sql的命令列成白名單進行表名位置的匹配,獲取表名以後再進行過濾。

5.因爲在備份binlog的同時又有新的binlog產生,這時就需要一個循環,不停地進行上述的4個步驟,直到剩下的binlog大小足夠小,就可以停一小段時間mysql的寫操作,將剩下的binlog完全同步過去。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章