1. 程式人生 > >MyFlash閃回恢復數據

MyFlash閃回恢復數據

gtid evel 線上 日誌 ameba -m spa max clu

使用限制:

1、binlog格式必須為row,且binlog_row_image=full。
2、僅支持5.6與5.73、只能回滾DML(增、刪、改)。
4、mysqlbinlog版本請保持一致。

1、安裝
安裝依賴。

yum install glib2 glib2-devel gcc  git mysql mysql-devel -y
yum groupinstall "Development tools" "Server Platform Development"

下載myflash源碼包。
下載地址:https://github.com/Meituan-Dianping/MyFlash/tree/master
編譯安裝myflash,此處采用靜態編譯方式。

cd /data/MyFlash-master
gcc -w -g `pkg-config --cflags  glib-2.0` source/binlogParseGlib.c   -o /data/flashback /usr/lib64/libglib-2.0.so -lrt

參數解析:
/data/MyFlash/source/binlogParseGlib.c:myflash c源碼文件位置 /data/flashback:編譯完成myflash的可執行文件位置 /usr/lib64/libglib-2.0.so:glib2.0的lib文件位置 pkg-config --cflags glib-2.0:標明使用的glib版本

2、使用幫助

./flashback --help

Usage:
flashback [OPTION...]

Help Options:
-?, --help Show help options

Application Options:
--databaseNames databaseName to apply. if multiple, seperate by comma(,)
  #指定需要回滾的數據庫名稱。多個數據庫名稱可以使用","隔開,如果不指定該參數,相當於指定所有數據庫

--tableNames tableName to apply. if multiple, seperate by comma(,)
#指定需要回滾的表名。多個表可以用
","隔開。如果不指定該參數,相當於指定所有表。 --start-position start position #指定回滾的開始位置。如不指定,從文件的開始處進行回滾。如指定,請指定正確有效的位置,否則無法回滾。 --stop-position stop position #指定回滾結束的位置。如不指定,回滾到文件結束位置。如指定,請指定正確有效的位置,否則無法回滾。 --start-datetime start time (format %Y-%m-%d %H:%M:%S) #指定回滾開始的時間。註意格式為:%Y-%m-%d %H:%M:%S。如不指定,則不限定時間。建議使用指定時間方式。 --stop-datetime stop time (format %Y-%m-%d %H:%M:%S) #指定回滾結束的時間。註意格式為:%Y-%m-%d %H:%M:%S。如不指定,則不限定時間。建議使用指定時間方式。 --sqlTypes sql type to filter . support INSERT, UPDATE ,DELETE. if multiple, seperate by comma(,) #指定需要回滾的sql類型。目前支持的過濾類型是INSERT, UPDATE ,DELETE。多個類型可以用","隔開。註意過濾類型要大寫。 --maxSplitSize max file size after split, the uint is M #指定該參數,對文件進行固定尺寸的分割(單位為M),過濾條件有效,但不進行回滾操作。該參數主要用來將大的binlog文件切割,防止單次應用的binlog尺寸過大,對線上造成壓力 --binlogFileNames binlog files to process. if multiple, seperate by comma(,) #指定需要回滾的binlog文件,目前只支持單個文件,後續會增加多個文件支持 --outBinlogFileNameBase output binlog file name base #指定輸出的binlog文件前綴,如不指定,則默認為binlog_output_base.flashback --logLevel log level, available option is debug,warning,error #僅供開發者使用,默認級別為error級別。在生產環境中不要修改這個級別,否則輸出過多 --include-gtids gtids to process #指定需要回滾的gtid,支持gtid的單個和範圍兩種形式。 --exclude-gtids gtids to skip #指定不需要回滾的gtid,用法同include-gtids。

3、使用示例

1.回滾整個文件
./flashback --binlogFileNames=haha.000041
mysqlbinlog binlog_output_base.flashback | mysql -h<host> -u<user> -p
2.回滾該文件中的所有insert語句 ./flashback --sqlTypes=INSERT --binlogFileNames=haha.000041 mysqlbinlog binlog_output_base.flashback | mysql -h<host> -u<user> -p
3.回滾大文件 回滾: ./flashback --binlogFileNames=haha.000042

切割大文件: ./flashback --maxSplitSize=1 --binlogFileNames=binlog_output_base.flashback
應用: mysqlbinlog binlog_output_base.flashback.
000001 | mysql -h<host> -u<user> -p ... mysqlbinlog binlog_output_base.flashback.<N> | mysql -h<host> -u<user> -p

4、測試示例

1、進行回滾,首先回滾二進制日誌
./flashback --databaseNames=owms-cd --sqlTypes=DELETE --binlogFileNames=/data/mysqldata/master-bin.000007 --start-datetime=2017-12-26 11:20:00 --outBinlogFileNameBase=lcs
生成文件如下: 
技術分享圖片
2、導入回滾完成的日誌
mysqlbinlog lcs.flashback | mysql
註:切分回滾完成的二進制日誌 
技術分享圖片

5、檢測表sum。

checksum table test ;
檢測test表的sum值

MyFlash閃回恢復數據