MyFlash閃回恢復數據
阿新 • • 發佈:2018-08-14
gtid evel 線上 日誌 ameba -m spa max clu
使用限制:
1、binlog格式必須為row,且binlog_row_image=full。 2、僅支持5.6與5.7。 3、只能回滾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閃回恢復數據