MySQL DBA或开发人员,有时会误删或者误更新数据,如果是线上环境并且影响较大,就需要能快速回滚。传统恢复方法是利用备份重搭实例,再应用去除错误sql后的binlog来恢复数据。此法费时费力,甚至需要停机维护,并不适合快速回滚。也有团队利用LVM快照来缩短恢复时间,但快照的缺点是会影响mysql的性能。MySQL闪回(flashback)利用binlog直接进行回滚,能快速恢复且不用停机。

闪回的原理

MySQL binlog以event的形式,记录了MySQL server从启用binlog以来所有的变更信息,能够帮助重现这之间的所有变化。MySQL引入binlog主要有两个目的:一是为了主从复制;二是某些备份还原操作后需要重新应用binlog。有三种可选的binlog格式,各有优缺点:

  • statement:基于SQL语句的模式,binlog数据量小,但是某些语句和函数在复制过程可能导致数据不一致甚至出错;
  • row:基于行的模式,记录的是行的完整变化。很安全,但是binlog会比其他两种模式大很多;
  • mixed:混合模式,根据语句来选用是statement还是row模式;

利用binlog闪回,需要将binlog格式设置为row。利用下面的语句可以查看当前binlog的模式。

show global variables like "%binlog_format%";

闪回的实战

真实的闪回场景中,最关键的是能快速筛选出真正需要回滚的SQL。我们使用开源工具binlog2sql来进行实战演练。binlog2sql由美团点评DBA团队(上海)出品,多次在线上环境做快速回滚。

① 安装binlog2sql工具

首先安装Python工具管理表pip
yum -y install epel-release
yum -y install python-pip安装binlog2sql
git clone https://github.com/danfengcao/binlog2sql.git && cd binlog2sql
pip install -r requirements.txt

② 闪回案例实战

1、我们使用之前的员工表数据,单独建立一个数据库

create database testflashback;
use testflashback;
source /root/tools/scott.sql

2、误操作,执行下面的事务。

start transaction;
delete from emp where sal>3000;
update emp set sal=6000;
delete from emp where job='CLERK';
commit;

3、查看目前的binlog文件

show master logs;

4、最新的binlog文件是mysql-binlog.000001。我们的目标是筛选出需要回滚的SQL,由于误操作人只知道大致的误操作时间,我们首先根据时间做一次过滤。只需要解析testflashback库emp表。(注:如果有多个sql误操作,则生成的binlog可能分布在多个文件,需解析多个文件)

python binlog2sql/binlog2sql.py -uroot -pWelcome_1 \
--start-file='mysql-binlog.000001' > /root/tools/raw.sql

上面的语句将列车emp表的所有binlog日志。如果能够确定大致的时间范围,可以使用参数–start-datetime和–stop-datetime进行过滤。例如:

--start-datetime='2016-12-26 11:44:00' --stop-datetime='2016-12-26 11:50:00'

解析处理的binlog如下:

5、根据位置信息,我们确定了误操作sql来自同一个事务,准确位置在14956-16791之间(binlog2sql对于同一个事务会输出同样的start position)。再根据位置过滤,使用 -B 选项生成回滚sql,检查回滚sql是否正确。(注:真实场景下,生成的回滚SQL经常会需要进一步筛选。结合grep、编辑器等)

python binlog2sql/binlog2sql.py -uroot -pWelcome_1 --start-file='mysql-binlog.000001' \
--start-position=14956 --stop-position=16791 -B > /root/tools/rollback.sql

下面是生成的闪回语句:

6、与业务方确认回滚sql没问题,执行回滚语句。登录mysql,确认回滚成功。

mysql -uroot -pWelcome_1 < /root/tools/rollback.sql

7、检查数据是否恢复

【赵渝强老师】MySQL的闪回相关推荐

  1. 【赵渝强老师】阿里云大数据ACP认证之阿里大数据产品体系

    阿里大数据产品体系是基于阿里云飞天平台上的数据处理服务.主要分为阿里云大数据基础产品和阿里云数加平台,其产品架构图如下所示: 一.阿里云大数据基础产品 1.云数据库--RDS(ApsaraDB for ...

  2. 【赵渝强老师】使用Weblogic的WLST工具

    一.什么是Weblogic WLST? WebLogic 脚本工具 (WebLogic Scripting Tool , WLST) 是一种命令行脚本界面,系统管理员和操作员用它来监视和管理 WebL ...

  3. Mysql数据恢复---闪回恢复

    使用过商业数据库oracle都知道,oracle有一个闪回功能非常好用,可以非常迅速的找回删除的数据或者删除的表,这个功能在线上要谨慎使用,除非是万般无奈之下才去使用,在转向使用mysql时发现,官方 ...

  4. mysql binlog2sql_mysql闪回工具binlog2sql安装配置教程详解

    概述 binlog2sql是一个Python开发开源的MySQL Binlog解析工具,能够将Binlog解析为原始的SQL,也支持将Binlog解析为回滚的SQL,去除主键的INSERT SQL,是 ...

  5. mysql有闪回吗_MySQL的闪回策略

    闪回原理 既然binlog以event形式记录了所有的变更信息,那么我们把需要回滚的event,从后往前回滚回去即可. 对于单个event的回滚,我们以表test.user来演示原理 mysql> ...

  6. mysql binlog2sql闪回数据

    利用binlog2sql快速闪回误删除数据 - 别拿豆包不当干粮 转原文地址: http://blog.51cto.com/sumongodb/2046073?cid=699139 各位兄弟们,好久不 ...

  7. mysql有闪回吗_mysql 闪回测试

    由于前面出现过几个需求,或者误操作,或者测试,需要我把某张表恢复到操作之前的一个状态,前面在生产中有过几次经历,实在太痛苦了,下面是一张表被误删除了,我的步骤是: 1  用全备恢复整个库(恢复到其他环 ...

  8. MySQL数据闪回工具

    文章目录 一. MySQL闪回工具 1.1 binlog2sql 1.2 MyFlash 二.总结 一. MySQL闪回工具 1.1 binlog2sql binlog2sql安装包及依赖包 asn1 ...

  9. MySQL Flashback 闪回功能详解

    目录 1. 简介 2. 闪回原理 3. flashback安装 4. ldconfig 解决依赖库 5. 使用简介 6. Flashback工具使用注意点 1. 简介 mysqlbinlog flas ...

最新文章

  1. 3.21日 爬虫小计
  2. 10- vue django restful framework 打造生鲜超市 -用户登录和手机注册(中)
  3. 信息学奥赛一本通 1031:反向输出一个三位数 | OpenJudge NOI 1.3 13
  4. LeetCode OJ Symmetric Tree 判断是否为对称树(AC代码)
  5. python中spider的用法_Spider-PyQuery基本用法(示例代码)
  6. python自带的用于解析HTML的库HtmlParser
  7. python实现进程调度算法
  8. 计算机telnet命令大全,telnet 命令使用方法详解,telnet命令怎么用
  9. HTML 多选框
  10. 最全 Yaml 语法详解
  11. malloc 是如何分配内存的?
  12. 类对象模型实验:类数据成员大小
  13. 吐血总结《Mysql从入门到入魔》,图文并茂
  14. 喜忧参半的电子烟 究竟是不是一个靠谱的创业机会?
  15. oracle官网一体机,沃趣科技-最新活动-oracle一体机|沃趣oracle一体机QData
  16. 安卓设备的Socket网络通讯例程 (A2) -UI界面适配
  17. Python语言程序设计笔记(全)
  18. CREO5.0.6.0基本操作与导出常用图保姆级教程
  19. Python:开发语言简介
  20. 聚划算的赢面不只是刘涛

热门文章

  1. java计算机毕业设计水星家纺网站源码+系统+数据库+lw文档+mybatis+运行部署
  2. Spring生命周期简述
  3. 用JS+CSS打造你自己的弹幕王国,让网页动起来!
  4. 学习笔记:matlab查看彩色图像的各个通道
  5. 2020哔哩哔哩bilibili安全挑战赛前5题思路
  6. mounted 与 methods 与 computed 与 watched区别
  7. @JsonFormat 使用方法
  8. 模型融合的一些思路集锦
  9. 【定时任务】时间轮算法
  10. 安信可 A7模块——GPRS之AT命令