簡介:
mysqlbinlog flashback功能是淘寶彭立勳(http://www.penglixun.com/)的一個很強勁的作品.
主要功能: 對rows格式的binlog可以進行逆向操作.delete反向生成insert, update生成反向的update,insert反向生成delete.讓dba同學們也有機會簡單的恢復數據.可恢復:insert, update,delete相關的操作.
演示一下使用過程:
生成帶有flashback mysqlbinlog 工具:
項止主頁:http://mysql.taobao.org/index.php/Patch_source_code#Add_flashback_feature_for_mysqlbinlog
准備好MySQL-5.5.18的源碼,這裡用的Percona-MySQL-5.5.18源碼
cd mysql-5.5.18
wget http://mysql.taobao.org/images/0/0f/5.5.18_flashback.diff
patch -p0<5.5.18_flashback.diff
即可以看到了mysqlbinlog , 因這裡只為要mysqlbinlog這個程序,所以編譯MySQL時沒加特別的參數.該工具是否具備flashback功能可以確認一下是否有 “-B” 這個參數.
開始實驗:
mysql test mysql> select count(*) from pic_url; +----------+ | count(*) | +----------+ | 786476 | +----------+ 1 row in set (0.11 sec) mysql>delete from pic_url; Query OK, 786476 rows affected (22.81 sec) mysql>select count(*) from pic_url; +----------+ | count(*) | +----------+ | 0 | +----------+ 1 row in set (0.03 sec)
mysql>show binary logs; ... | mysql-bin.000011 | 195001447 | | mysql-bin.000012 | 106 | +------------------+-----------+
Tips:
定位日值,一般看當前的log如果當前的log文件比較小,那麼就是上一個文件至於為什麼,這裡就不講了.也可以用mysqlbinlog 去實際查看確認一下.
接下來就是要找到這個delete在log中position的變化區間了.這個沒什麼技巧,通常使用:
./mysqlbinlog -v --base64-output=decode-rows /u1/mysql/logs/mysql-bin.000011 >11.sql
然後對11.sql文件進行搜索了表名,找到相應的節點.大表刪除通常最後的stop點都在文件最後.找到節點後就可以:
./mysqlbinlog -v --base64-output=decode-rows -B --start-position=377 --stop-position=195001377 /u1/mysql/logs/mysql-bin.000011>B11.sql
同樣對B11.sql這個文件驗證一下.看看結尾是和預期一樣.驗證OK後就可以:
./mysqlbinlog -B --start-position=377 --stop-position=195001377 /u1/mysql/logs/mysql-bin.000011|mysql test
如果表比較大,則執行著比較慢.如不出錯請耐心等待.執行完畢後:
mysql>select count(*) from pic_url; +----------+ | count(*) | +----------+ | 786476 | +----------+ 1 row in set (0.11 sec)
數據又恢復了.
注意:
為防止恢復報錯需要把:max_allowed_packet 改到最大值1G;
mysql>set global max_allowed_packet=1024*1024*1024;
#max_allow_packet大小不夠時報錯如下:
ERROR 1153 (08S01) at line 403133: Got a packet bigger than ‘max_allowed_packet' bytes
恢復操作有風險,請在備庫操作或是在經驗豐富的同學指導下進行.
二進制文件上傳不到服務器上,傳到github上一個二進制文件:https://github.com/wubx/mysql-binlog-statistic/tree/master/bin 在64的位的linux系統編譯的. 有需要的直接下載.