操作資料庫時候難免會因為“大意”而誤操作,需要快速恢復的話透過備份來恢復是不太可能的,因為需要還原和binlog差來恢復,等不了,很費時。這裡先說明下因為Delete 操作的恢復方法:主要還是透過binlog來進行恢復,前提是binlog_format必須是Row格式,否則只能透過備份來恢復資料了。方法: 條件:開啟Binlog,Format為Row。 步驟:1.透過MySQL自帶工具mysqlbinlog 指定匯出操作的記錄:
2.資料取出來之後,需要把資料解析反轉,原始資料:
Row格式的binlog記錄的格式如上面所示,需要做的工作就是吧Delete的操作轉換成Insert操作,發上面的都是有一定規律的,並且需要注意的是:
1、欄位型別 DATETIME 日期。在日誌中儲存的格式為 @4=2012-10-25 00:00:00,需要將2012-10-25 00:00:00加上引號。
2、負數。在日誌中儲存的格式為 @1=-1 (4294967295), -2(4294967294),-3(4294967293),需要將()裡面的資料去掉,只保留@1=-1。
3、跳脫字元集。如:"s,\,等。上面3點清楚之後,可以寫一個指令碼(水平有限,在提升中,寫的不好看):
View Code
執行指令碼:方法:python 指令碼名 binlog檔案 欄位數目
python restore.py binlog.txt 36 > binlog.sql
命令列中的36 表示 需要還原的表的欄位有36個,效果:
最後還原:
總結:下次整理Row和STATEMENT的優劣。
操作資料庫時候難免會因為“大意”而誤操作,需要快速恢復的話透過備份來恢復是不太可能的,因為需要還原和binlog差來恢復,等不了,很費時。這裡先說明下因為Delete 操作的恢復方法:主要還是透過binlog來進行恢復,前提是binlog_format必須是Row格式,否則只能透過備份來恢復資料了。方法: 條件:開啟Binlog,Format為Row。 步驟:1.透過MySQL自帶工具mysqlbinlog 指定匯出操作的記錄:
2.資料取出來之後,需要把資料解析反轉,原始資料:
Row格式的binlog記錄的格式如上面所示,需要做的工作就是吧Delete的操作轉換成Insert操作,發上面的都是有一定規律的,並且需要注意的是:
1、欄位型別 DATETIME 日期。在日誌中儲存的格式為 @4=2012-10-25 00:00:00,需要將2012-10-25 00:00:00加上引號。
2、負數。在日誌中儲存的格式為 @1=-1 (4294967295), -2(4294967294),-3(4294967293),需要將()裡面的資料去掉,只保留@1=-1。
3、跳脫字元集。如:"s,\,等。上面3點清楚之後,可以寫一個指令碼(水平有限,在提升中,寫的不好看):
View Code
執行指令碼:方法:python 指令碼名 binlog檔案 欄位數目
python restore.py binlog.txt 36 > binlog.sql
命令列中的36 表示 需要還原的表的欄位有36個,效果:
最後還原:
總結:下次整理Row和STATEMENT的優劣。