MySQL工具推荐 | 基于MySQL binlog的flashback工具-阿里云开发者社区

开发者社区> 数据库> 正文
登录阅读全文

MySQL工具推荐 | 基于MySQL binlog的flashback工具

简介:

1、前言

相信您应该遇到过因为误操作破坏数据库的问题,比如忘了带WHERE条件的UPDATE、DELETE操作,然后就需要进行传统方式的全量 & 增量恢复。现在,给您介绍一下MySQL中的flashback玩法,也可以做到像Oracle的flashback那样。

目前MySQL的 flashback(又称 闪回)一般是利用binlog完成的,能快速完成恢复且无需停机维护。

第一个实现该功能的是阿里云的 彭立勋,他在MySQL 5.5版本上就已实现,并将其开源及提交给MariaDB,为社区提供了非常优秀的参考模型。

2、闪回原理

本节我们先来介绍一下MySQL binlog flashback的基本工作原理。
MySQL的binlog以event的形式,记录了MySQL中所有的变更情况,利用binlog我们就能够重现所记录的所有操作。
MySQL引入binlog主要有两个用途/目的:一是为了主从复制;二是用于备份恢复后需要重新应用部分binlog,从而达到全备+增备的效果。

MySQL的binlog共有三种可选格式(binlog_format),其各有优缺点:
statement,基于SQL语句的模式,一般来说生成的binlog尺寸较小,但是某些不确定性SQL语句或函数在复制过程可能导致数据不一致甚至出错;
row,基于数据行的模式,记录的是数据行的完整变化。相对更安全,推荐使用(但通常生成的binlog会比其他两种模式大很多);
mixed,混合模式,可以根据情况自动选用statement抑或row模式;这个模式下也可能造成主从数据不一直。它属于MySQL 5.1版本时期的过渡方案。因此,如果你现在还使用mixed的话,那你的过渡时间也太久了......
备注:想要使用binlog flashback工具,需要将binlog_format设置为row才行。
3、工具推荐

项目一:mysqlbinlog_flashback
项目作者:赖亿@58到家
github项目地址:https://github.com/58daojia-dba/mysqlbinlog_flashback
也可在github.com上搜索“mysqlbinlog_flashback”
项目介绍:产生在线mysqlbinlog的回滚的sql,现在已经在阿里的rds上,db为utf8字符集的生产环境下使用。其他环境没有在生产环境下使用,请小心。
项目使用反馈:laiyi@daojia.com

项目二:binlog2sql
项目作者:曹单锋
github项目地址:https://github.com/danfengcao/binlog2sql
也可在github.com上搜索“binlog2sql”
项目介绍:从MySQL binlog解析出你要的SQL。根据不同选项,你可以得到原始SQL、回滚SQL、去除主键的INSERT SQL等。
项目反馈:danfengcao.info@gmail.com

应用场景
flashback,数据快速回滚;
主从切换后数据不一致的修复;
从binlog生成标准SQL,再自行二次开发;

文章转自老叶茶馆公众号,原文链接:https://mp.weixin.qq.com/s/1Y6xLIwK9_Lx5eCiBBm9jQ

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享: