mysqlbinlog flashback 5.6使用案例

简介: 转自:https://www.cnblogs.com/youge-OneSQL/p/5249736.html 简介 DBA或者开发人员,有时会误删除或者误更新数据。传统的数据库恢复方法是利用之前的备份再加上误操作之前的binlog,来恢复数据。

转自:https://www.cnblogs.com/youge-OneSQL/p/5249736.html

简介

DBA或者开发人员,有时会误删除或者误更新数据。传统的数据库恢复方法是利用之前的备份再加上误操作之前的binlog,来恢复数据。该方法需要耗费较长时间来恢复备份,甚至需要停机维护,严重降低系统的可用性。

MySQL的flashback功能是由淘宝的彭立勋,在MySQL-5.5.18的基础上开发的。随着binlog格式的变动和类型的增加,基于5.5.18的版本,无法用于目前主流的5.6版本的。因此平民软件将该功能移植到5.6版本上,让相关人员对数据库有更强的掌控能力。

 

binlog格式选择

MySQL的binlog格式分为三类:statement、mixed、row。其中,

    statement格式,记录了所有客户端的执行语句。比如 update tb1 set name='aaa' where id=1;

    row格式,记录了数据库的变更前和变更后数据。比如 update tb1 set name='aaa' ,id=1 where name='bbb' , id=1;

    mixed格式,是二者的混合。在使用statement格式不会造成主从不一致时,使用statement格式,否则使用row模式。

因此想要把数据回退到上一个时间点,必须保证binlog_format=row

闪回原理

单个event闪回

举例说明

  • 在数据库中创建如下表

mysql> show create table tb1\G
*************************** 1. row ***************************
Table: tb1
Create Table: CREATE TABLE `tb1` (
`id` int(11) DEFAULT NULL,
`name` varchar(20) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1

  • 执行增、删、改动作

insert into tb1 values(1,'aaa'),(2,'aaa');

delete from tb1 where id=2;

update tb1 set name='bbb' where id=1;

  • 查看binlog文件

mysqlbinlog -v 128.000129

########################################

SET TIMESTAMP=1459999601/*!*/;
BEGIN
/*!*/;
# at 301
#160407 11:26:41 server id 10 end_log_pos 346 Table_map: `test`.`tb1` mapped to number 224
# at 346
#160407 11:26:41 server id 10 end_log_pos 395 Write_rows: table id 224 flags: STMT_END_F

BINLOG '
cdMFVxMKAAAALQAAAFoBAAAAAOAAAAAAAAEABHRlc3QAA3RiMQACAw8CFAAD
cdMFVx4KAAAAMQAAAIsBAAAAAOAAAAAAAAEAAgAC//wBAAAAA2FhYfwCAAAAA2FhYQ==
'/*!*/;
### INSERT INTO `test`.`tb1`
### SET
### @1=1
### @2='aaa'
### INSERT INTO `test`.`tb1`
### SET
### @1=2
### @2='aaa'
# at 395
#160407 11:26:41 server id 10 end_log_pos 422 Xid = 271
COMMIT/*!*/;
# at 422
#160407 11:27:04 server id 10 end_log_pos 490 Query thread_id=5 exec_time=0 error_code=0
SET TIMESTAMP=1459999624/*!*/;
BEGIN
/*!*/;
# at 490
#160407 11:27:04 server id 10 end_log_pos 535 Table_map: `test`.`tb1` mapped to number 224
# at 535
#160407 11:27:04 server id 10 end_log_pos 575 Delete_rows: table id 224 flags: STMT_END_F

BINLOG '
iNMFVxMKAAAALQAAABcCAAAAAOAAAAAAAAEABHRlc3QAA3RiMQACAw8CFAAD
iNMFVyAKAAAAKAAAAD8CAAAAAOAAAAAAAAEAAgAC//wCAAAAA2FhYQ==
'/*!*/;
### DELETE FROM `test`.`tb1`
### WHERE
### @1=2
### @2='aaa'
# at 575
#160407 11:27:04 server id 10 end_log_pos 602 Xid = 272
COMMIT/*!*/;
# at 602
#160407 11:27:22 server id 10 end_log_pos 670 Query thread_id=5 exec_time=0 error_code=0
SET TIMESTAMP=1459999642/*!*/;
BEGIN
/*!*/;
# at 670
#160407 11:27:22 server id 10 end_log_pos 715 Table_map: `test`.`tb1` mapped to number 224
# at 715
#160407 11:27:22 server id 10 end_log_pos 765 Update_rows: table id 224 flags: STMT_END_F

BINLOG '
mtMFVxMKAAAALQAAAMsCAAAAAOAAAAAAAAEABHRlc3QAA3RiMQACAw8CFAAD
mtMFVx8KAAAAMgAAAP0CAAAAAOAAAAAAAAEAAgAC///8AQAAAANhYWH8AQAAAANiYmI=
'/*!*/;
### UPDATE `test`.`tb1`
### WHERE
### @1=1
### @2='aaa'
### SET
### @1=1
### @2='bbb'
# at 765
#160407 11:27:22 server id 10 end_log_pos 792 Xid = 273
COMMIT/*!*/;
# at 792
#160407 11:28:04 server id 10 end_log_pos 829 Rotate to 128.000130 pos: 4
DELIMITER ;

###################################################

  • 反转

insert:event中包含该行数据的每个字段值,删除即可
delete:event中包含了删除前,该行数据的所有字段值。将删除的数据,重新插入即可
update:只需将set和where部分调换,即可完成反转。

多个event闪回

如果误操作的事务是由多个event组成的,那么必须将整个事务倒序恢复,即从最后一个event恢复到第一个event。

 

使用方法

举例说明

  • insert into tb1 values(1,'aaa'),(2,'aaa');
  • delete from tb1 where id=2;
  • update tb1 set name='bbb' where id=1;
  • select * from tb1;

+------+------+
| id     | name |
+------+------+
| 1      | bbb |
+------+------+

  • mysqlbinlog -v --start-pos=557 128.000132

#####################

# at 557
#160407 12:04:15 server id 10 end_log_pos 602 Table_map: `test`.`tb1` mapped to number 224
# at 602
#160407 12:04:15 server id 10 end_log_pos 652 Update_rows: table id 224 flags: STMT_END_F

BINLOG '
P9wFVxMKAAAALQAAAFoCAAAAAOAAAAAAAAEABHRlc3QAA3RiMQACAw8CFAAD
P9wFVx8KAAAAMgAAAIwCAAAAAOAAAAAAAAEAAgAC///8AQAAAANhYWH8AQAAAANiYmI=
'/*!*/;
### UPDATE `test`.`tb1`
### WHERE
### @1=1
### @2='aaa'
### SET
### @1=1
### @2='bbb'
# at 652
#160407 12:04:15 server id 10 end_log_pos 679 Xid = 540
COMMIT/*!*/;

#####################

  • mysqlbinlog -v -B --start-pos=557 128.000132

############################

BINLOG '
P9wFVxMKAAAALQAAAFoCAAAAAOAAAAAAAAEABHRlc3QAA3RiMQACAw8CFAAD
P9wFVx8KAAAAMgAAAIwCAAAAAOAAAAAAAAEAAgAC///8AQAAAANiYmL8AQAAAANhYWE=
'/*!*/;
### UPDATE `test`.`tb1`
### WHERE
### @1=1
### @2='bbb'
### SET
### @1=1
### @2='aaa'

############################

可以看出update已经被反转

执行反转

  • mysqlbinlog -B -v --start-pos=557 128.000132 | mysql -utest -ptest test

mysql> select * from tb1;
+------+------+
| id     | name |
+------+------+
| 1      | aaa |
+------+------+

有兴趣的,可以继续往下恢复。

       注意:恢复之前先在不使用的从机上做测试,测试成功后,再在主库上做。

限制

       该软件利用binlog中记录了操作前的数据镜像和操作后的数据镜像。有如下限制

1)        binlog_format=row

2)        只支持insert、update、delete

3)        不支持drop 、truncate、alter等ddl语句

结论

       flashback功能,可以在紧急情况下,避免用户漫长的数据库恢复过程。让高可用提升一个级别。

 

下载地址

  http://pan.baidu.com/s/1nutwWg5

 

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
|
人工智能 搜索推荐 云栖大会
解密!通义智文-你的AI阅读助手!
通义智文是基于通义大模型的AI阅读助手,网页阅读、论文阅读、图书阅读和自由阅读,用AI帮你读得多、读得快、读得懂。 通过文档场景化阅读、结构化导读、给我灵感、多文档处理等亮点功能和文档智能大小模型协同的核心技术。让AI帮你更准确,更深入,更专业的读懂文档,沉淀专属知识资产。 产品已于2023年10月31日在云栖大会正式对外发布,现免费公测全面开放。
4008 1
解密!通义智文-你的AI阅读助手!
|
SQL 数据库
SQL 查询优化指南:SELECT、SELECT DISTINCT、WHERE 和 ORDER BY
SQL的SELECT语句用于从数据库中选择数据。SELECT语句的基本语法如下:
766 1
|
3月前
|
人工智能 缓存 自然语言处理
通义千问Qwen3.7-Max全解析:万亿MoE旗舰,35小时自主执行的全能智能体
Qwen3.7-Max是通义千问系列的新一代旗舰大模型,定位为智能体时代的通用基座,以万亿级MoE混合专家架构为核心,实现从“被动响应问答”到“主动执行复杂任务”的本质跃迁。它集成百万级超长上下文、原生全模态理解、顶尖代码生成、长程自主执行、全链路办公与生态协同六大核心能力,在全球权威基准测试中多项指标登顶,可稳定完成35小时连续自治任务、1158次工具调用,真正成为能独立完成全流程工程开发、深度分析与自动化办公的AI助手。本文从技术架构、核心能力、实战场景、API接入与成本优化等维度,全面拆解Qwen3.7-Max的功能与价值,附可直接运行的代码命令与配置示例。
692 2
|
8月前
|
人工智能 开发框架 算法
从架构到落地:Java 大模型企业级稳定框架的设计与实践
JBoltAI是专为Java生态打造的企业级AI框架,聚焦生产环境下的稳定接入、高效复用与灵活扩展。它屏蔽大模型底层差异,保障高并发稳定性,无缝兼容SpringBoot等现有技术栈,提供Prompt工程、知识库、Agent等全链路封装及数十种开箱即用AI场景,助力Java团队零门槛实现AI规模化落地。(239字)
256 0
|
4月前
|
存储 安全 数据库
零成本构建企业级知识中枢指南:一套可落地的开源方法论
本文为技术负责人亲述的零成本企业知识中枢建设指南:基于纯开源组件,构建含存储抽象、RAG混合检索、知识图谱治理与物理隔离安全四层架构的知识中枢,兼顾可用性、可控性与合规性,MVP两周可落地。(239字)
356 0
|
7月前
|
安全 API
广告敏感词过滤-敏感词-文本审核-敏感词过滤-敏感词检测
本工具提供文本合规检测服务,精准识别广告法违禁词、极限用语(如“顶级”“全网首发”)、色情低俗、辱骂攻击及低质灌水等内容,支持电商文案、短视频脚本、企业宣传物料等多场景审核,保障内容安全合规。
931 10
|
9月前
|
JavaScript C++ UED
Vue 路由跳转深度解析 $router.push VS location.href
本文深度剖析 Vue SPA 中 `this.$router.push()` 与 `window.location.href` 的本质差异:前者基于 Vue Router 实现无刷新导航,完整触发守卫、保持状态、支持懒加载;后者绕过框架导致刷新、丢状态、失效守卫。涵盖原理、源码、模式对比及最佳实践,助你写出高可用、高性能的路由逻辑。(239字)
264 2
|
人工智能 API 开发者
这个「看图识万物」API,直接把万物百科打包进你的应用
看图识万物提供对话式多模态识别:不止识别物体,更能问答明星新作、动植物品种、文物背景等,并融合实时网络与百科知识。支持URL/Base64输入,开箱即用,大幅降低开发成本。
403 0
|
8月前
|
机器学习/深度学习 人工智能 文字识别
视频后期黑科技:深度拆解开源 VSR 架构与视频 Inpainting 实践全指南
本文深度解析视频补全(Video Inpainting)前沿技术,聚焦硬字幕去除工具VSR的底层架构(OCR定位、时序传播、光流对齐)、本地部署要点(CUDA环境、显存优化)及云端方案(550W AI扩散模型),对比二者在隐私、效率与画质上的差异,助力开发者科学选型。(239字)
845 4
|
资源调度
nrm-pm是如何管理不同包管理器的源的?
nrm-pm是如何管理不同包管理器的源的?
537 121