Tech Neo技巧沙龙 | 11月25号,九州云/ZStack与您一路商量云时代收集界线治理实践
因为运维、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组合而成。
每个event都是由event header 和event data构成。下面简单介绍下几种常见的binlog event。
① formart description event
表达的含义是:
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
表达的含义是:
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
表达的含义是:
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