數據的還原操作mixed和row的操作

MySQL備份策略:全備+增量備份主要包括以下幾個步驟:

1、開啓BINLOG服務

2、使用MYSQLDUMP對數據庫進行完全備份

3、使用flush logs指令刷新創建新的2進制日誌

4、使用mysqlbinlog logs-bin.[0-9]* |mysql進行增量備份的恢復

一般的,假設我們週日下午3點進行了完全備份並生成備份文件full_backup_20170215.sql,周1周2中午1點進行了兩次增量備份,

分別生成增量備份文件mysql-bin.000018,mysql-bin.000019,周3上午10點數據庫發生奔潰,需要進行數據恢復,此時正在記錄的

2進制日誌爲mysql-bin.000020,需要恢復其中記錄的操作,具體爲:

1、恢復全備

2、恢復BINLOG(備份後的BINLOG文件:mysql-bin.000018,mysql-bin.000019,mysql-bin.000020)

##binlog文件可以導成SQL文件或者直接用/usr/local/mysql/bin/mysqlbinlog mysql-bin.000018,mysql-bin.000019,mysql-bin.000020|mysql

這樣導入也是可以的,導成SQL文件,不需要加任何參數mysqlbinlog mysql-bin.000020>a20.sql



全備+增量備份

週日全備,周1、2、3是增量,周3刪除數據,周4、5、6繼續增量,還原周3誤刪除的數據:

1、還原全備

2、還原增備(1,2,4,5,6)

3、對周3的BINLOG 文件導成SQL文件,找到刪除的數據行前加#號,然後在還原周3的增量

全局替換sed -i "s/delete/#delete/g" aa17.sql, 基於binlog_format=mixed


################################################

對於在row模式下,誤刪除某些數據,要立刻還原的操作

基於row模式的binlog,生成DML(insert/update/delete)的rollback語句

通過mysqlbinlog -v 解析binlog生成可讀的sql文件

提取需要處理的有效sql

    "### "開頭的行.如果輸入的start-position位於某個event group中間,則會導致"無法識別event"錯誤


 將INSERT/UPDATE/DELETE 的sql反轉,並且1個完整sql只能佔1行

     INSERT: INSERT INTO => DELETE FROM, SET => WHERE

     UPDATE: WHERE => SET, SET => WHERE

     DELETE: DELETE FROM => INSERT INTO, WHERE => SET

 用列名替換位置@{1,2,3}

     通過desc table獲得列順序及對應的列名

     特殊列類型value做特別處理

 逆序

 

 注意:

    表結構與現在的表結構必須相同[謹記]

    由於row模式是冪等的,並且恢復是一次性,所以只提取sql,不提取BEGIN/COMMIT

    只能對INSERT/UPDATE/DELETE進行處理

代碼作者不詳,能用就好o(∩_∩)o :

使用過程簡單:

1、添加連接數據庫的用戶名和密碼

2、在/usr/bin目錄下不要有其他版本的mysqlbinlog文件,和當前版本統一

3、執行腳本 perl binlog_rollback.pl -f './mysql-bin.000020' -i -o  '/tmp/t.sql' -u 'dlan' -p 'root123'

4、代碼包下載  http://down.51cto.com/data/2287584

發佈了87 篇原創文章 · 獲贊 30 · 訪問量 14萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章