- 优点:
- 快 // 比binlog2sql快
- 原生binlog格式
- 安装简单
- 功能强大
- 不需要账号密码连接
- 缺点:
- 必须为行模式 rows
安装依赖
yum install glib2-devel gcc -y
下载包
# 可能无法访问推荐迅雷下载即可 wget https://github.com/Meituan-Dianping/MyFlash/archive/refs/heads/master.zip
解压
unzip master.zip
进入目录
cd MyFlash-master
安装
## 动态编译 (推荐) gcc -w `pkg-config --cflags --libs glib-2.0` source/binlogParseGlib.c -o binary/flashback ## 静态编译 gcc -w -g `pkg-config --cflags glib-2.0` source/binlogParseGlib.c -o binary/flashback /usr/lib64/libglib-2.0.a -lrt
查看用法
cd binary/ ./flashback --help Usage: flashback [OPTION?] Help Options: -h, --help Show help options Application Options: --databaseNames #库名 --tableNames #表名 --tableNames-file #表名文件路径 --start-position #起始位置 --stop-position #停止位置 --start-datetime #开始时间 格式(format %Y-%m-%d %H:%M:%S) --stop-datetime #停止时间 格式(format %Y-%m-%d %H:%M:%S) --sqlTypes #要筛选的sql类型。支持INSERT, UPDATE ,DELETE.。 --maxSplitSize #拆分后的最大文件大小,单位为 M # 文件拆分 --binlogFileNames #要处理的binlog文件。 --outBinlogFileNameBase #输出binlog文件名 --logLevel #日志级别,可用选项为 debug,warning,error --include-gtids #要处理的GTID。 --include-gtids-file #要处理的GTID。 --exclude-gtids #要跳过的GTID。 --exclude-gtids-file #要跳过的GTID。
实战用法
# 一般生产是指定起始position进行单表回滚的可自行添加使用 cd binary/ ./flashback \ --logLevel=error \ --databaseNames=test \ --tableNames=t1 \ --sqlTypes=update \ --binlogFileNames=/mydata/3306/binlog/mysql-bin.000002,/mydata/3306/binlog/mysql-bin.000003 \ --outBinlogFileNameBase=/tmp/roll_update_1
导入到数据库
# 将二进制文件转化为mysql可识别的格式 并跳过gtid mysqlbinlog --skip-gtids roll_update_1.flashback >roll_update_1.flashback_bak # 登录mysql mysql -S /root/mysql-sandboxes/3306/sandboxdata/mysqld.sock -p # 进库 use test # 导入到数据库 mysql> source /tmp/roll_update_1.flashback_bak Query OK, 0 rows affected (0.00 sec) Query OK, 0 rows affected (0.00 sec) Query OK, 0 rows affected (0.00 sec) Query OK, 0 rows affected (0.00 sec) Query OK, 0 rows affected (0.00 sec) Query OK, 0 rows affected (0.00 sec) Query OK, 0 rows affected (0.00 sec) Query OK, 0 rows affected (0.00 sec)
检查数据是否恢复
问题
回滚时状态条数会显示为0 但其实执行成功了 建议单个文件去回滚,从后往前回滚,先回滚数字大的binlog文件,最好按回滚顺序标记好 1、2、3这样好回滚 在source时加begin是无法回滚source的SQL的 # 解决 如果想使用begin; commit; or rollback;的话 要在恢复文件中开头写上begin; 并删除文本中所有的commit语句 在导入完成后,检查数据是否正确,正确则在命令行commit;错误则rollback; 建议不要在导入大文件时使用这种方法 # 建议没有从库的情况下导入时不写入binlog 没有从库的情况下哈 set sql_log_bin=0; set sql_log_bin=1;
分享是一种精神
好用点个赞谢谢