在MySQL中使用mysqlbinlog flashback的簡(jiǎn)單教程
簡(jiǎn)介:
mysqlbinlog flashback功能是淘寶彭立勛(http://www.penglixun.com/)的一個(gè)很強(qiáng)勁的作品.
主要功能: 對(duì)rows格式的binlog可以進(jìn)行逆向操作.delete反向生成insert, update生成反向的update,insert反向生成delete.讓dba同學(xué)們也有機(jī)會(huì)簡(jiǎn)單的恢復(fù)數(shù)據(jù).可恢復(fù):insert, update,delete相關(guān)的操作.
演示一下使用過(guò)程:
生成帶有flashback mysqlbinlog 工具:
項(xiàng)止主頁(yè):http://mysql.taobao.org/index.php/Patch_source_code#Add_flashback_feature_for_mysqlbinlog
準(zhǔn)備好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這個(gè)程序,所以編譯MySQL時(shí)沒(méi)加特別的參數(shù).該工具是否具備flashback功能可以確認(rèn)一下是否有 “-B” 這個(gè)參數(shù).
開(kāi)始實(shí)驗(yàn):
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:
定位日值,一般看當(dāng)前的log如果當(dāng)前的log文件比較小,那么就是上一個(gè)文件至于為什么,這里就不講了.也可以用mysqlbinlog 去實(shí)際查看確認(rèn)一下.
接下來(lái)就是要找到這個(gè)delete在log中position的變化區(qū)間了.這個(gè)沒(méi)什么技巧,通常使用:
./mysqlbinlog -v --base64-output=decode-rows /u1/mysql/logs/mysql-bin.000011 >11.sql
然后對(duì)11.sql文件進(jìn)行搜索了表名,找到相應(yīng)的節(jié)點(diǎn).大表刪除通常最后的stop點(diǎn)都在文件最后.找到節(jié)點(diǎn)后就可以:
./mysqlbinlog -v --base64-output=decode-rows -B --start-position=377 --stop-position=195001377 /u1/mysql/logs/mysql-bin.000011>B11.sql
同樣對(duì)B11.sql這個(gè)文件驗(yàn)證一下.看看結(jié)尾是和預(yù)期一樣.驗(yàn)證OK后就可以:
./mysqlbinlog -B --start-position=377 --stop-position=195001377 /u1/mysql/logs/mysql-bin.000011|mysql test
如果表比較大,則執(zhí)行著比較慢.如不出錯(cuò)請(qǐng)耐心等待.執(zhí)行完畢后:
mysql>select count(*) from pic_url; +----------+ | count(*) | +----------+ | 786476 | +----------+ 1 row in set (0.11 sec)
數(shù)據(jù)又恢復(fù)了.
注意:
為防止恢復(fù)報(bào)錯(cuò)需要把:max_allowed_packet 改到最大值1G;
mysql>set global max_allowed_packet=1024*1024*1024;
#max_allow_packet大小不夠時(shí)報(bào)錯(cuò)如下:
ERROR 1153 (08S01) at line 403133: Got a packet bigger than ‘max_allowed_packet' bytes
恢復(fù)操作有風(fēng)險(xiǎn),請(qǐng)?jiān)趥鋷?kù)操作或是在經(jīng)驗(yàn)豐富的同學(xué)指導(dǎo)下進(jìn)行.
二進(jìn)制文件上傳不到服務(wù)器上,傳到github上一個(gè)二進(jìn)制文件:https://github.com/wubx/mysql-binlog-statistic/tree/master/bin 在64的位的linux系統(tǒng)編譯的. 有需要的直接下載.
相關(guān)文章
MySQL給字符串加一個(gè)高效索引的實(shí)現(xiàn)
本文主要介紹了MySQL給字符串加一個(gè)高效索引的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-03-03
MySQL觸發(fā)器運(yùn)用于遷移和同步數(shù)據(jù)的實(shí)例教程
這篇文章主要介紹了MySQL觸發(fā)器運(yùn)用于遷移和同步數(shù)據(jù)的實(shí)例教程,分別是SQL Server數(shù)據(jù)遷移至MySQL以及同步備份數(shù)據(jù)表記錄的兩個(gè)例子,需要的朋友可以參考下2015-12-12
Windows10下mysql 8.0.12 解壓版安裝圖文教程
這篇文章主要為大家詳細(xì)介紹了Windows10下mysql 8.0.12 解壓版安裝圖文教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-09-09
mysql查詢結(jié)果命令行方式導(dǎo)出/輸出/寫入到文件的3種方法舉例
這篇文章主要給大家介紹了關(guān)于mysql查詢結(jié)果命令行方式導(dǎo)出/輸出/寫入到文件的3種方法,?在使用MySQL進(jìn)行數(shù)據(jù)庫(kù)操作的過(guò)程中,我們經(jīng)常需要將查詢結(jié)果導(dǎo)出到文件中以備后續(xù)分析和處理,需要的朋友可以參考下2023-08-08
MySQL數(shù)據(jù)庫(kù)給表添加索引的實(shí)現(xiàn)
在MySQL中,索引是用來(lái)加速數(shù)據(jù)庫(kù)查詢的一種特殊數(shù)據(jù)結(jié)構(gòu),當(dāng)我們需要查詢數(shù)據(jù)庫(kù)中某些數(shù)據(jù)的時(shí)候,如果數(shù)據(jù)庫(kù)中有索引,就可以避免全表掃描,從而提高查詢速度,本文就介紹了如何給表添加索引,感興趣的可以了解一下2023-08-08
MySQL命令行方式進(jìn)行數(shù)據(jù)備份與恢復(fù)
本文主要介紹了MySQL命令行方式進(jìn)行數(shù)據(jù)備份與恢復(fù),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-08-08
MySQL主從復(fù)制的原理及配置方法(比較詳細(xì))
MySQL 的數(shù)據(jù)庫(kù)的高可用性的架構(gòu)大概有以下幾種:集群,讀寫分離,主備。而后面兩種都是通過(guò)復(fù)制來(lái)實(shí)現(xiàn)的。下面將簡(jiǎn)單介紹復(fù)制的原理及配置,以及一些常見(jiàn)的問(wèn)題2014-05-05

