技术分享 | 浅谈MySQL闪回的实现

MySQL中Flashback(闪回)技术 作为一个开发人员,数据的误操作(如误删除、误更新)是一个常见且可能导致严重后果的问题。Flashback(闪回)技术作为一种数据恢复手段,能够帮助数据库管理员将数据库恢复到过去某个特定的时间点或事务点之前的状态,从而挽回因误操作造成的数据损失。 阅读详情

欢迎来到 GreatSQL社区分享的MySQL技术文章,如有疑问或想学习的内容,可以在下方评论区留言,看到后会进行解答

1、闪回实现原理

2、binlog文件格式初探

3、闪回实现过程

1、闪回实现原理

闪回的业务价值是,在DBA执行错误的数据提交操作之后,还能把数据恢复还原到之前某个时刻的状态,最大程度地挽回损失。

在MySQL中,binlog文件主要用于主从同步二进制数据日志。当主服务器数据发生变更时,会把变动明细持久化到binlog文件中,此时从服务器通过拉取并解析binlog文件,实现数据的同步。正是由于binlog文件中记录了数据变更的信息,因此MySQL的闪回是基于binlog文件来实现的。

说的更准确一点,如果要在MySQL中实现闪回,则必须要求binlog文件日志格式是 binlog_format=row ,并且 binlog_row_image=full 。通过指定binlog文件的日志格式,就能在binlog中完整记录数据变化的轨迹和具体的操作行为(增删改)的前后差异。

基于上述前提,我们可以解析并处理binlog文件中的事件,然后反序遍历。同时对增删改进行反转逆操作,即插入映射成删除、删除映射成插入、更新交换新旧数据区间。最后输出对应数据回滚的binlog文件,将其再次导入mysql,即完成对增删改数据的回滚还原。

2、binlog文件格式初探

binlog是一个二进制文件,具体存放的路径,可以通过在mysql的客户端执行:show variables like '%datadir%',这个SQL语句来查看。这时结合上面的路径信息,在终端中可以输入:

#  binlog文件存放路径
cd /home/mysql-server/bld_debug/install_debug/data/

#  binlog.000006指要查看的binlog文件名
    hexdump -C binlog.000006|more。

结果示例如下:

    00000000  fe 62 69 6e ad 10 15 61  0f 01 00 00 00 79 00 00  |.bin...a.....y..|
    00000010  00 7d 00 00 00 00 00 04  00 38 2e 30 2e 32 35 2d  |.}.......8.0.25-|
    00000020  31 35 2d 64 65 62 75 67  00 00 00 00 00 00 00 00  |15-debug........|
    00000030  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
    00000040  00 00 00 00 00 00 00 00  00 00 00 ad 10 15 61 13  |..............a.|
    00000050  00 0d 00 08 00 00 00 00  04 00 04 00 00 00 61 00  |..............a.|
    00000060  04 1a 08 00 00 00 08 08  08 02 00 00 00 0a 0a 0a  |................|
    00000070  2a 2a 00 12 34 00 0a 28  01 ea d7 cf 01 ad 10 15  |**..4..(........|
    00000080  61 23 01 00 00 00 1f 00  00 00 9c 00 00 00 80 00  |a#..............|
    ......

前面的4个字节fe 62 69 6e是魔数,标识文件类型是binlog。后面的二进制数据则表示事件,binlog中记录的事件类型主要有:

  • FORMAT_DESCRIPTION_EVENT:该事件描述了binlog文件的版本信息和MySQL服务器版本信息,以及文件中涉及到所有事件的类型。它是binlog文件中的第一个事件,并且有且只有一个。

  • TABLE_MAP_EVENT:该事件记录了将要发生更新的表结构信息,比如表字段的类型,表字段长度以及是否可空等。

  • WRITE_ROWS_EVENT/UPDATE_ROWS_EVENT/DELETE_ROWS_EVENT:分别表示插入、更新和删除事件,必须配合TABLE_MAP_EVENT来进行解析,通常我们将上述三个事件统称为ROWS_EVENT事件。

  • binlog文件的内容就是由头4个字节的魔数标识叠加若干事件要素组成的。更多binlog文件的信息可以参考官方文档:https://dev.mysql.com/doc/internals/en/binary-log.html

3、闪回实现过程

  • 步骤1:解析binlog文件中的事件。特别将ROWS_EVENT、TABLE_MAP_EVENT提取出来,放入待处理队列。

  • 步骤2:循环遍历队列元素,将ROWS_EVENT和它就近的TABLE_MAP_EVENT进行关联绑定,同时反转DML操作。即判断事件类型如果是插入事件WRITE_ROWS_EVENT用删除事件DELETE_ROWS_EVENT进行替换;判断如果是删除事件DELETE_ROWS_EVENT用插入事件WRITE_ROWS_EVENT替换;如果是更新事件UPDATE_ROWS_EVENT则交换对调更新操作前后的新旧数据镜像分区。

  • 步骤3:逆序遍历队列元素,同时生成新的回滚binlog日志文件。

  • 步骤4:把回滚的binlog文件通过mysql客户端导入到数据库中。

Enjoy GreatSQL :)

文章推荐:

技术分享 | MGR最佳实践(MGR Best Practice) https://mp.weixin.qq.com/s/66u5K7a9u8GcE2KPn4kCaA

技术分享 | 万里数据库MGR Bug修复之路 https://mp.weixin.qq.com/s/IavpeP93haOKVBt7eO8luQ

Macos系统编译percona及部分函数在Macos系统上运算差异 https://mp.weixin.qq.com/s/jAbwicbRc1nQ0f2cIa_2nQ

技术分享 | 利用systemd管理MySQL单机多实例 https://mp.weixin.qq.com/s/iJjXwd0z1a6isUJtuAAHtQ

产品 | GreatSQL,打造更好的MGR生态 https://mp.weixin.qq.com/s/ByAjPOwHIwEPFtwC5jA28Q

产品 | GreatSQL MGR优化参考 https://mp.weixin.qq.com/s/5mL_ERRIjpdOuONian8_Ow

关于 GreatSQL

GreatSQL是由万里数据库维护的MySQL分支,专注于提升MGR可靠性及性能,支持InnoDB并行查询特性,是适用于金融级应用的MySQL分支版本。

Gitee: https://gitee.com/GreatSQL/GreatSQL

GitHub: https://github.com/GreatSQL/GreatSQL

微信&QQ群:

可搜索添加GreatSQL社区助手微信好友,发送验证信息“加群”加入GreatSQL/MGR交流微信群

QQ群:533341697 微信小助手:wanlidbc

本文由博客一文多发平台 OpenWrite 发布!

MySQL Binlog 闪回与分析 由于误操作、代码 bug 或平台误点,我们在操作数据时难免会遇到数据丢失的情况,比如一条 delete 删除了预期之外的数据。早期想要恢复数据,只能通过 全量备份 + 日志备份 恢复数据或业务人员通过日志以及业务逻辑进行手动订正,这些恢复数据的方法影响其恢复速度的变量很多,全量备份如果数据量很大,上传和解压缩的耗时很久,还要考虑增量日志应用。手动订正数据量大业务逻辑复杂的话,是一件非常消耗人力的事情,且容易出错。直到出现 Binlog 闪回技术,大大的提升了 DML 造成数据丢失的恢复速度。 阅读详情

相关推荐

使用MySQL的闪回查询功能

本文将介绍如何使用MySQL的闪回工具包来实现闪回查询功能。MySQL的闪回工具包为我们提供了强大的闪回查询功能,使我们能够快速恢复数据库中的数据到先前的状态。通过按照上述步骤安装闪回工具包、启用闪回日志并执行闪回查询,您可以轻松地使用MySQL的闪回功能来实现数据恢复。将上述示例中的"表名"替换为您要执行闪回查询的实际表名,而"yyyy-mm-dd hh:mm:ss"替换为您要恢复的特定时间戳。要使用闪回查询功能,首先需要安装MySQL的闪回工具包。现在,您可以执行闪回查询来恢复先前的数据状态。

SmufHtml的博客 809

MySQL闪回功能

熟悉Oracle的朋友知道,如果在Oracle中误删除了数据,特定场景下可以通过闪回,进行数据的恢复,操作上是比较直观的,而且有很多粒度,例如闪回查询、闪回表、闪回事务、闪回数据库。MySQL中同样支持闪回,但是和Oracle略有区别,通过这篇文章《技术分享 | 浅谈MySQL闪回的实现》,了解一下MySQL数据库闪回功能。1、闪回实现原理闪回的业务价值是,在DBA执行错误的数据提交操作之后,还能...

bisal的专栏 779

【openGauss实战13】闪回技术

本篇结合企业实战介绍了openGauss闪回技术。

IT邦德 4796

删库不再跑路之-Mysql闪回实战演练

binlog2sql 是大众点评开源的一款用于解析 binlog 的工具,可以用于生成闪回语句,项目地址 (https://sourl.cn/ZuNJPN)

西原一点红的博客 813

MySQL Flashback闪回功能详解.docx

MySQL Flashback闪回功能详解.docx

用74LS190和555定时器复刻经典交通灯:一个电子工程新手的实战避坑记录

本文记录了使用74LS190和555定时器复刻经典交通灯的实战过程,详细介绍了元件选型、电路搭建与调试的关键步骤。特别分享了555定时器参数设置、74LS190级联技巧以及状态机设计的避坑经验,为电子工程新手提供实用参考。

weixin_42629671的博客 306

技术分享|闪回在MySQL中的实现和改进

GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源。 3306π 福州站,以下内容是由万里数据库,研发工程师唐洁分享的MySQL闪回方案完整PPT。 Enjoy GreatSQL :) 文章推荐: GreatSQL MGR FAQ https://mp.weixin.qq.com/s/J6wkUpGXw3YkyEUJXiZ9xA 万答#12,MGR整个集群挂掉后,如何才能自动选主,不用手动干预 https://mp.wei.

GreatSQL2021的博客 179

cMake编译 VS2026+opencv4.12.0+opencv_contrib-4.12.0

本文提供了OpenCV 4.12.0集成CUDA、cuDNN和ONNX Runtime的详细编译指南。主要步骤包括:准备Visual Studio 2026、CMake 4.2.0、CUDA 12.6和cuDNN 9.16.0;设置无空格和中文的路径结构;配置关键CMake变量(如开启CUDA支持、指定路径等);以及最终的编译安装过程。注意事项包括:版本一致性检查、cuDNN文件复制、国内用户需手动获取.cache文件等。文章还提供了常见问题解决方案,如通过设置CUDA_NVCC_FLAGS参数解决VS版本

weixin_46624734的博客 1384

技术分享 | MySQL 闪回工具 MyFlash

作者:陈怡 爱可生南分团队 DBA,负责公司自动化运维平台维护和处理客户问题。 本文来源:原创投稿 *爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。 前言 MyFlash 是美团点评开源的一个 MySQL 闪回工具,可以用来回滚 MySQL 中的 DML 操作,恢复到某时刻的数据。本文将简单地介绍 MySQL 闪回工具 MyFlash 的使用。 限制 MyFlash 工具存在如下限制: binlog 格式必须为 row,且 binlog_row_image = full.

ActionTech的博客 445

手把手教你用Node.js模拟大麦APP下单请求(含滑块验证处理)

本文详细解析了如何使用Node.js模拟大麦APP下单请求的全流程,包括接口逆向、滑块验证处理和签名算法逆向等关键技术。通过实战案例和代码示例,帮助开发者掌握移动端API调用的核心要素,如动态参数构造、安全验证突破等,提升自动化下单的成功率和效率。

weixin_42569329的博客 353

股票行情接口,最全的接入方法

股票行情接口一般有两种,一种是WebSocket,一种是http,通过WebSocket可以获取逐笔的股票tick数据,实时并且高效;通过http接口可以获取股票行情接口中的股票历史数据;WebSocket是一种高效的双向通信协议,它允许数据的实时推送,避免了不断的轮询请求。其次,WebSocket允许您订阅特定的数据源或股票数据产品,只接收您感兴趣的信息,提高了数据的效率和可用性。通过接入股票行情数据的HTTP接口,您可以将数据导入到自己的分析工具或系统中,进行更深入的数据分析、模型构建和决策支持。

apifinance的博客 3425

mysql 闪回到指定时间_技术分享 | MySQL 闪回工具 MyFlash

前言MyFlash 是美团点评开源的一个 MySQL 闪回工具,可以用来回滚 MySQL 中的 DML 操作,恢复到某时刻的数据。本文将简单地介绍 MySQL 闪回工具 MyFlash 的使用。限制MyFlash 工具存在如下限制:binlog 格式必须为 row,且 binlog_row_image = full仅支持 5.6 与 5.7 版本的 MySQL只能回滚 DML( 增、删、改 )操作...

weixin_29535345的博客 242

NSGA(非支配排序遗传算法)

在多目标优化问题中,往往存在多个相互冲突的目标需要同时优化。传统的单目标优化算法无法直接应用于这类问题,因此需要专门的多目标优化算法。非支配排序遗传算法(Non-dominated Sorting Genetic Algorithm,NSGA)是一种经典的多目标优化算法,由印度科学家 Kalyanmoy Deb 等人于 1995 年提出。NSGA 通过非支配排序和拥挤度距离来引导种群向 Pareto 最优前沿进化,从而得到一组具有良好分布性和收敛性的 Pareto 最优解。

2975

mysql update select用法_技术分享 | MySQL 闪回工具 MyFlash

作者:陈怡爱可生南分团队 DBA,负责公司自动化运维平台维护和处理客户问题。本文来源:原创投稿*爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。前言MyFlash 是美团点评开源的一个 MySQL 闪回工具,可以用来回滚 MySQL 中的 DML 操作,恢复到某时刻的数据。本文将简单地介绍 MySQL 闪回工具 MyFlash 的使用。限制MyFlash 工具...

weixin_39795971的博客 133

Vue路由守卫实战:利用token实现跨项目免登录跳转(最新版)

本文详细介绍了如何利用Vue路由守卫和Token验证实现跨项目免登录跳转方案。通过核心架构设计、路由守卫精细化控制及Token交换安全实践,有效解决了多系统跳转中的认证问题,提升用户体验和系统连贯性。

n7o8p的博客 138

第14.1章 高翔博士2025年11月最新开源框架Lightning-LM源码学习解读(一):激光-IMU定位+建图算法各模块简介

Lightning-LM:高效激光SLAM定位系统 该框架基于模块化设计,通过激光-IMU融合实现快速建图与定位,核心特点包括: 极速性能:纯CPU运行(建图1.2核/定位0.8核) 模块化架构:包含激光里程计(LIO)、地图管理、回环检测等独立模块 动态场景支持:地图分块加载、动静态图层分离 多模式适配:支持ROS2环境下的在线/离线运行 关键模块包括前端里程计(core/lio)、2D/3D地图转换(core/g2p5)、轻量优化库(core/miao)等,通过系统控制器(core/system)协调流

行知SLAM 2438

MySQL闪回的实现和改进介绍

《MySQL闪回功能》文章中介绍了MySQL数据库的闪回功能,唐老师的这次分享从操作层面做了更多的介绍《技术分享|闪回在MySQL中的实现和改进》,可以学习借鉴。如果您认为这篇文章有些帮助,还请不吝点下文章末尾的"点赞"和"在看",或者直接转发pyq,近期更新的文章:《MySQL闪回功能》《MySQL 8.0对count(*)的优化》《大同两日游攻略和避坑实用帖》《tcpdump抓包神器介绍》《了...

bisal的专栏 259

华为OD技术面真题 - 计算机网络 - 1

汇总华为OD技术面八股文计算机网络相关八股文,高频技术真题并提供详细解答。

qq_45776114的博客 1327

mysql数据库闪回表

我整理的一些关于【MySQL,SQL】的项目学习资料(附讲解~~)和大家一起分享、学习一下:https://edu.51cto.com/surl=QDW3g3MySQL数据库闪回表:一探究竟 随着信息技术的迅速发展,数据安全和可靠性成为了数据库管理中的重要议题。MySQL作为一款广泛使用的开源关系数据库管理系统,其灵活性...

weixin_40453272的博客 251

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

MySQL闪回工具简介 及 binlog2sql工具用法

一、 简介 binlog2sql是大众点评开源的一款用于解析binlog的工具。 1. 根据文档主要用途如下: 数据快速回滚(闪回) 主从切换后新master丢数据的修复 从binlog生成标准SQL,带来的衍生功能 实际主要功能有两个: 解析binlog生成执行过的SQL 生成对应的回滚SQL 2. 使用前提 MySQL server必须设置以下参数 [mysqld] ...

Hehuyi_In的博客 3950

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

mysql binlog 闪回_mysql binlog2sql闪回数据

利用binlog2sql快速闪回误删除数据 - 别拿豆包不当干粮各位兄弟们,好久不见了!最近一直忙于新书的创作,所以一直没有时间更新博客。不知道这段时间大家学习得怎么样,希望大家通过看我的文章给大家带来帮助。老张我也花费了大量时间录制一些数据库的视频课程,大家要是感兴趣,也可以去学习,不要错过啊!今儿抽出时间,给大家分享一篇利用binlog2sql闪回工具,来恢复误删除的数据。我们都知道binlo...

weixin_39948247的博客 184

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

技术分享 | 测试git上2500星的闪回小工具

GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源。 1、实验环境 2、软件下载 3、开始测试 4、附参数说明 生产上发生误删数据或者误更新数据的事故时,传统恢复方法是利用备份重搭实例,再应用binlog来恢复数据,有时候需要找回的数据条数非常少,却要恢复几十甚至上百G的备份,费时费力。 那有没有像oracle一样的可以闪回的方式来方便的恢复数据呢,答案是有的。我们MySQL有binlog,binlog以event的形式,记录了MySQL server从启用binlog.

GreatSQL2021的博客 161

MySQL 闪回原理与实战

来源:伯乐在线专栏作者 - 曹单锋 如有好文章投稿,请点击 → 这里了解详情 如需转载,发送「转载」二字查看说明 DBA或开发人员,有时会误删或者误更新数据,如果是线上环境并且影响较大,就需要能快速回滚。传统恢复方法是利用备份重搭实例,再应用去除错误sql后的binlog来恢复数据。此法费时费力,甚至需要停机维护,并不适合快速回滚。也有团队利用LVM快照来缩短

雅冰石的专栏 2388

OceanBase 数据库闪回查询

更新时间:2023-12-20 17:00:34编辑分享OceanBase 数据库提供了记录级别的闪回查询(Flashback Query)功能,该功能允许用户获取某个历史版本的数据。其中,Oracle 模式支持AS OF SCN和两种语法来查询;MySQL 模式支持通过语法来查询。OceanBase 数据库当前支持用户通过设置租户级配置项的方式来进行闪回查询。当用户设置后,即可使用闪回查询功能查询当前时间T到时间范围内的任意多版本数据。租户级配置项的默认值为 1800,单位为秒,有关租户级配置项。

viviliving的专栏 846
上一篇: 技术分享 | Update更新慢、死锁等问题的排查思路分享
下一篇: 技术分享 | 浅谈mysql语法解析调试方法
GreatSQL社区
博客等级 码龄5年 1210粉丝 390原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值