Flash基础入门之MySQL 闪回工具MyFlash
小标 2019-01-24 来源 : 阅读 1249 评论 0

摘要:本文主要向大家介绍了Flash基础入门之MySQL 闪回工具MyFlash,通过具体的内容向大家展现,希望对大家学习Flash基础入门有所帮助。

本文主要向大家介绍了Flash基础入门之MySQL 闪回工具MyFlash,通过具体的内容向大家展现,希望对大家学习Flash基础入门有所帮助。

一. 简介
背景:由于运维、开发误操作或是业务bug,我们在操作中时不时会出现误删除数据情况。早期要想恢复数据,只能让业务人员根据线上操作日志,构造误删除的数据,或者DBA使用binlog和备份的方式恢复数据,不管那种,都非常费时费力,而且容易出错。
MyFlash是由美团点评公司技术工程部开发维护的一个回滚DML操作的工具。该工具通过解析v4版本的binlog,完成回滚操作。相对已有的回滚工具,其增加了更多的过滤选项,让回滚更加容易。
二. 恢复工具对比
1.mysqlbinlog工具配合sed、awk。该方式先将binlog解析成类SQL的文本,然后使用sed、awk把类SQL文本转换成真正的SQL。

优点:当SQL中字段类型比较简单时,可以快速生成需要的SQL,且编程门槛也比较低。
缺点:当SQL中字段类型比较复杂时,尤其是字段中的文本包含HTML代码,用awk、sed等工具时,就需要考虑极其复杂的转义等情况,出错概率很大。

2.给数据库源码打patch。该方式扩展了mysqlbinlog的功能,增加Flashback选项。

优点:复用了MySQL Server层中binlog解析等代码,一旦稳定之后,无须关心复杂的字段类型,且效率较高。
缺点:在修改前,需要对MySQL的复制代码结构和细节需要较深的了解。版本比较敏感,在MySQL 5.6上做的patch,基本不能用于MySQL 5.7的回滚操作。升级困难,因为patch的代码是分布在MySQL的各个文件和函数中,一旦MySQL代码改变,特别是复制层的重构,升级的难度不亚于完全重新写一个。

3.使用业界提供的解析binlog的库,然后进行SQL构造,其优秀代表是binlog2sql。

优点:使用业界成熟的库,因此稳定性较好,且上手难度较低。
缺点:效率往往较低,且实现上受制于binlog库提供的功能。

4.MyFlash 特点

无需把binlog解析成文本,再进行转换。
提供原生的基于库、表、SQL类型、位置、时间等多种过滤方式。
支持MySQL多个版本(5.6与5.7)
对于数据库的代码重构不敏感,利于升级。
自主掌控binlog解析,提供尽可能灵活的方式。

三. MyFlash 安装

解压
unzip MyFlash-master.zip
动态编译
gcc -w  pkg-config --cflags --libs glib-2.0 source/binlogParseGlib.c  -o binary/flashback

四. MyFlash 使用
4.1. 参数
全部参数请通过--help查看,以下指列举部分常用参数。

databaseNames
指定需要回滚的数据库名。多个数据库可以用“,”隔开。如果不指定该参数,相当于指定了所有数据库。
tableNames
指定需要回滚的表名。多个表可以用“,”隔开。如果不指定该参数,相当于指定了所有表。
start-datetime
指定回滚的开始时间。注意格式必须是 %Y-%m-%d %H:%M:%S。 如不指定,则不限定时间
stop-datetime
指定回滚的结束时间。注意格式必须是 %Y-%m-%d %H:%M:%S。 如不指定,则不限定时间
sqlTypes
指定需要回滚的sql类型。目前支持的过滤类型是INSERT, UPDATE ,DELETE。多个类型可以用“,”隔开。
binlogFileNames
指定需要回滚的binlog文件,目前只支持单个文件,后续会增加多个文件支持。
outBinlogFileNameBase
指定输出的binlog文件前缀,如不指定,则默认为binlog_output_base.flashback。

4.2. 示例

回滚bin.000009中,所有与Messages_Center 表上delete操作有关的SQL,时间为‘2018-04-17 15:00:00‘ 之后。

1.过滤并重新生成回滚二进制日志
./flashback --databaseNames stdzwfw9release --tableNames Messages_Center --start-datetime 2018-04-17 15:00:00 --sqlTypes DELETE --binlogFileName bin.000009
2.应用生成的回滚日志
mysqlbinlog binlog_output_base.flashback | mysql -h -u -p
五. 个人总结
MySQL下的误删除恢复经常会碰到,之前我们的普遍做法都是通过mysqlbinlog flashback参数来生成回滚数据,但是有些时候会比较麻烦,因为无法只选择某一类操作,所以会导致恢复的数据会涵盖其他类型的操作,需要人工再次过滤,比较费时费力。
MyFlash的参数可以选择dml操作,那么恢复起来就简单许多,指定恢复的binlog,DML操作,恢复的时间段,即可生成数据,进行回滚。

以上就介绍了Flash的相关知识,希望对Flash有兴趣的朋友有所帮助。了解更多内容,请关注职坐标常用软件Flash频道!

本文由 @小标 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程