【赵渝强老师】MySQL的闪回
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的闪回相关推荐
- 【赵渝强老师】阿里云大数据ACP认证之阿里大数据产品体系
阿里大数据产品体系是基于阿里云飞天平台上的数据处理服务.主要分为阿里云大数据基础产品和阿里云数加平台,其产品架构图如下所示: 一.阿里云大数据基础产品 1.云数据库--RDS(ApsaraDB for ...
- 【赵渝强老师】使用Weblogic的WLST工具
一.什么是Weblogic WLST? WebLogic 脚本工具 (WebLogic Scripting Tool , WLST) 是一种命令行脚本界面,系统管理员和操作员用它来监视和管理 WebL ...
- Mysql数据恢复---闪回恢复
使用过商业数据库oracle都知道,oracle有一个闪回功能非常好用,可以非常迅速的找回删除的数据或者删除的表,这个功能在线上要谨慎使用,除非是万般无奈之下才去使用,在转向使用mysql时发现,官方 ...
- mysql binlog2sql_mysql闪回工具binlog2sql安装配置教程详解
概述 binlog2sql是一个Python开发开源的MySQL Binlog解析工具,能够将Binlog解析为原始的SQL,也支持将Binlog解析为回滚的SQL,去除主键的INSERT SQL,是 ...
- mysql有闪回吗_MySQL的闪回策略
闪回原理 既然binlog以event形式记录了所有的变更信息,那么我们把需要回滚的event,从后往前回滚回去即可. 对于单个event的回滚,我们以表test.user来演示原理 mysql> ...
- mysql binlog2sql闪回数据
利用binlog2sql快速闪回误删除数据 - 别拿豆包不当干粮 转原文地址: http://blog.51cto.com/sumongodb/2046073?cid=699139 各位兄弟们,好久不 ...
- mysql有闪回吗_mysql 闪回测试
由于前面出现过几个需求,或者误操作,或者测试,需要我把某张表恢复到操作之前的一个状态,前面在生产中有过几次经历,实在太痛苦了,下面是一张表被误删除了,我的步骤是: 1 用全备恢复整个库(恢复到其他环 ...
- MySQL数据闪回工具
文章目录 一. MySQL闪回工具 1.1 binlog2sql 1.2 MyFlash 二.总结 一. MySQL闪回工具 1.1 binlog2sql binlog2sql安装包及依赖包 asn1 ...
- MySQL Flashback 闪回功能详解
目录 1. 简介 2. 闪回原理 3. flashback安装 4. ldconfig 解决依赖库 5. 使用简介 6. Flashback工具使用注意点 1. 简介 mysqlbinlog flas ...
最新文章
- 3.21日 爬虫小计
- 10- vue django restful framework 打造生鲜超市 -用户登录和手机注册(中)
- 信息学奥赛一本通 1031:反向输出一个三位数 | OpenJudge NOI 1.3 13
- LeetCode OJ Symmetric Tree 判断是否为对称树(AC代码)
- python中spider的用法_Spider-PyQuery基本用法(示例代码)
- python自带的用于解析HTML的库HtmlParser
- python实现进程调度算法
- 计算机telnet命令大全,telnet 命令使用方法详解,telnet命令怎么用
- HTML 多选框
- 最全 Yaml 语法详解
- malloc 是如何分配内存的?
- 类对象模型实验:类数据成员大小
- 吐血总结《Mysql从入门到入魔》,图文并茂
- 喜忧参半的电子烟 究竟是不是一个靠谱的创业机会?
- oracle官网一体机,沃趣科技-最新活动-oracle一体机|沃趣oracle一体机QData
- 安卓设备的Socket网络通讯例程 (A2) -UI界面适配
- Python语言程序设计笔记(全)
- CREO5.0.6.0基本操作与导出常用图保姆级教程
- Python:开发语言简介
- 聚划算的赢面不只是刘涛