程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> 在MySQL中應用mysqlbinlog flashback的簡略教程

在MySQL中應用mysqlbinlog flashback的簡略教程

編輯:MySQL綜合教程

在MySQL中應用mysqlbinlog flashback的簡略教程。本站提示廣大學習愛好者:(在MySQL中應用mysqlbinlog flashback的簡略教程)文章只能為提供參考,不一定能成為您想要的結果。以下是在MySQL中應用mysqlbinlog flashback的簡略教程正文


簡介:
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體系編譯的. 有須要的直接下載.

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved