美团mysql 闪回_MyFlash--美团点评的开源MySQL闪回工具

Tech Neo技巧沙龙 | 11月25号,九州云/ZStack与您一路商量云时代收集界线治理实践

75a12b7aca3e95138c21f97259aefd80.jpg-wh_651x-s_804473196.jpg

因为运维、DBA的误操作或是营业bug,我们在操作中时不时会出现误删除数据情况。早期要想恢复数据,只能让营业人员根据线上操作日记,构造误删除的数据,或者DBA应用binlog和备份的方法恢复数据,不管那种,都异常费时辛苦,并且轻易掉足。直到彭立勋初次在MySQL社区为mysqlbinlog扩大了闪回功能。

② decimal类型

在美团点评,我们也碰到过研发人员误删主站的设备信息,大年夜而导致主站长达2个小时弗采取的情况。DBA同窗当时应用了技巧团队自研的binlog2sql完成了数据恢复,并多次抢救了线上误删数据导致的严重故障。不过,binlog2sql在恢复速度上不尽如人意,是以我们开辟了一个新的对象——MyFlash,它很好地解决了上述痛点,可以或许便利并且高效地进行数据恢复。

如今该对象正式开源,开源地址为:https://github.com/Meituan-Dianping/MyFlash 。

闪回对象近况

先来看下今朝市情上已有的恢复对象,我们大年夜实现角度把它们划分成如下几类。

mysqlbinlog对象合营sed、awk。该方法先将binlog解析成类SQL的文本,然后应用sed、awk把类SQL文本转换成真正的SQL。长处:当SQL中字段类型比较简单时,可以快速生成须要的SQL,且编程门槛也比较低。

缺点:当SQL中字段类型比较复杂时,尤其是字段中的文本包含HTML代码,用awk、sed等对象时,就须要推敲极其复杂的转义等情况,掉足概率很大年夜。

给数据库源码打patch。该方法扩大了mysqlbinlog的功能,增长Flashback选项。长处:复竽暌姑了MySQL Server层中binlog解析等代码,一旦稳定之后,无须关怀复杂的字段类型,且效力较高。

缺点:在修改前,须要对MySQL的复制代码构造和细节须要较深的懂得。版本比脚绫囚感,在MySQL 5.6上做的patch,根本不克不及用于MySQL 5.7的回滚操作。进级艰苦,因为patch的代码是分布在MySQL的各个文件和函数中,一旦MySQL代码改变,特别是复制层的重构,进级的难度不亚于完全从新写一个。

应用业界供给的解析binlog的看维然落后行SQL构造,其优良代表是binlog2sql。长处:应用业界成熟的看维是以稳定性较好,且上手难度较低。

缺点:效力往往较低,且实现上受制于binlog库供给的功能。

上述几种实现方法,主如果供给的过滤选项较少,比如不克不及供给基于SQL类型的过滤,须要回滚一个delete语句,导致在回滚时,须要结合awk、sed等对象进行筛选。

总结了上述几种对象的优缺点,我认为幻想的闪回对象须要有以下特点。

b. 供给原生的基于库、表、SQL类型、地位、时光等多种过滤方法。

d. 对于数据库的代码重构不敏感,利于进级。

e. 自立掌控binlog解析,供给尽可能灵活的方法。

在这些特点中,binlog的解析是一切工作的基本。接下来我会介绍binlog的根本构造。

binlog格局概览

一个完全的binlog文件是由一个format description event开首,一个rotate event结尾,中心由多个其他event组合而成。

f606c90d7077d6cb56bd94d2205684cf.png

0d8e23d362d1a8b61df56a34cd671338.png

每个event都是由event header 和event data构成。下面简单介绍下几种常见的binlog event。

① formart description event

04e340f6e4b341d3f6aa51621e2ae2fc.png

表达的含义是:

binlog文件实例:

170905  01:59:33 server id 10  end_log_pos 123 CRC32 0xed1ec563

Start: binlog v 4, server v 5.7.18-log created 170905  01:59:33

② table map event

1bccb9b20fd2c83f36546bd5fcaf2ea8.png

表达的含义是:

170905  01:59:33 server id 10  end_log_pos 339 CRC32 0x3de40c0d

当然在反转前,也可以增长过滤操作。比如过滤库名、表名和SQL类械寥。

Table_map: `test`.`test4` mapped to number 238

③ update row event

86d4a80247c9667ceb507db529fa77a9.png

表达的含义是:

9065b82801daf958fce4881e7e1aa669.png

Update_rows: table id 238 flags: STMT_END_F

UPDATE `test`.`test4` WHERE @1=3 SET @1=13;

binlog event回滚

根据膳绫擎的binlog介绍,可以看到每个binlog event中event header有个type_code,个中insert为30,update为31,delete为32。对于insert和delete两个相反的操作,只需把type_code交换,则在binlog event级别完成回滚。

推荐阅读

Tech Neo技巧沙龙 | 11月25号,九州云/ZStack与您一路商量云时代收集界线治理实践

会议地点:北京永泰福朋喜来登【51CTO.com原创稿件】九大年夜主题论坛 规格最高的云枷⒚鹦业嘉会由中国电>>>详细阅读

地址:http://www.17bianji.com/lsqh/39027.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值