美團點評myflash安裝
git clone https://github.com/meituan-dianping/myflash.git
幾點需要注意的細節
binlog格式必須為row,且binlog_row_image=full
僅支援5.6與5.7
隻能復原dml(增、删、改)
之前本人常用的binlog復原工具binlog2sql。其上手比較容易。是采用業界提供的解析binlog的庫,然後進行sql構造,且實作上受制于binlog庫提供的功能。
myflash實作原理是通過binlog event進行復原,每個binlog event中event header有個type_code,其中insert為30,update為31,delete為32。對于insert和delete兩個相反的操作,隻需把type_code互換,則在binlog event級别完成復原
而update語句相對繁瑣,需要對binlog event中data部分修改前資料和修改後資料的内容進行反轉,而update語句復原的核心在于計算出每個修改前資料和修改後資料的長度。
官方文檔建議進入安裝包目錄進行
動态編譯連結
<code>gcc -w</code>pkg-config --cflags --libs glib-2.0<code>source/binlogparseglib.c -o binary/flashback</code>
靜态編譯連結
<code>gcc -w -g</code>pkg-config --cflags glib-2.0<code>source/binlogparseglib.c -o binary/flashback /usr/lib64/libglib-2.0.a -lrt</code>
這裡我直接使用安裝包目錄下binary目錄下flashback可執行檔案進行使用,有可能會報出glibc版本過低,自行更新2.14進行使用,更新代碼如下
安裝後可以直接使用可執行檔案進行使用。
下列參數可以任意組合
一般常用于時間段復原及pos點復原,先确認異常sql的pos點位或時間點位
通過flashback指令轉換binlog内容,之後使用binary目錄下的mysqlbing解析成可執行sql後校驗完成并應用
當檔案超過20m時候需要使用切片參數進行執行
復原大檔案