操作數據庫時候難免會因為“大意”而誤操作,需要快速恢復的話通過備份來恢復是不太可能的,因為需要還原和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的優劣。