MyFlash
1 安装
binlog格式必须为row,且binlog_row_image=full
仅支持5.6与5.7 (自测8.0的binlog也可以部分解析)
`只能回滚DML(增、删、改)`
binlog闪回工具有binlog2sql、myflash
1、用binlog2sql恢复dml操作,但需要伪装slave读取binlog读取系统表等操作,恢复速度比较慢
2、美团技术团队开发了myflash工具,这个工具直接对binlog文件内容进行解析反转,因此速度较快
(可离线)
1.该工具推荐用户在下载源码之后,进行动态编译链接安装
下载链接:https://github.com/Meituan-Dianping/MyFlash
2.动态编译链接,解压,切换到目录下
依赖:yum install -y glib2-devel
gcc -w `pkg-config --cflags --libs glib-2.0` source/binlogParseGlib.c -o binary/flashback
./flashback --help
2 使用
1.
有事务号:使用--include-gtids
./flashback --binlogFileNames=mysql-bin.000003 --databaseNames=portal-user --tableNames=employee_biz --sqlTypes='delete,insert,update' --include-gtids='725a2882-e2c1-11eb-8683-0050568a3d63:1-211'
`支持:写一个类型
--sqlTypes='delete,insert,update'
2.
有position,如at 7211
./flashback --binlogFileNames=mysql-bin.000003 --databaseNames=portal-user --tableNames=employee_biz --sqlTypes='delete,insert,update' --start-position=7211
3.
默认生成binlog_output_base.flashback文件
验证文件内容:
mysqlbinlog -vv binlog_output_base.flashback >>delete.txt
4.
`需修改position或是事务号的过滤条件
mysqlbinlog --no-defaults --base64-output=decode-rows -vv mysql-bin.000003 --include-gtids='725a2882-e2c1-11eb-8683-0050568a3d63:1-211' | awk '/###/ {if($0~/UPDATE|INSERT|DELETE/)count[$2" "$NF]++}END{for(i in count) print i,"\t",count[i]}' | column -t | sort -k2nr
5.
mysqlbinlog --no-defaults --base64-output=decode-rows -vv binlog_output_base.flashback | awk '/###/ {if($0~/UPDATE|INSERT|DELETE/)count[$2" "$NF]++}END{for(i in count) print i,"\t",count[i]}' | column -t | sort -k2nr
6.
mysqlbinlog -vv binlog_output_base.flashback --skip-gtids|mysql -uroot -p
7.
checksum table tablename;
3 参数说明
1.start-position
指定回滚开始的位置,如不指定则从文件的开始处回滚
2.stop-position
指定回滚结束的位置,如不指定则回滚到文件结尾
3.include-gtids
指定需要回滚的gtid,支持gtid的单个和范围两种形式。
4.exclude-gtids
指定不需要回滚的gtid,用法同include-gtids
5.sqlTypes
指定需要回滚的sql类型。目前支持的过滤类型是INSERT, UPDATE ,DELETE。多个类型可以用“,”隔开
6.maxSplitSize
一旦指定该参数,对文件进行固定尺寸的分割(单位为M)。防止单次应用的binlog尺寸过大。指定一个文件多少兆。