MySQL 闪回工具 MyFlash
1|0技术分享 | MySQL 闪回工具 MyFlash
作者:陈怡
爱可生南分团队 DBA,负责公司自动化运维平台维护和处理客户问题。
本文来源:原创投稿
*爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。
2|0前言
MyFlash 是美团点评开源的一个 MySQL 闪回工具,可以用来回滚 MySQL 中的 DML 操作,恢复到某时刻的数据。本文将简单地介绍 MySQL 闪回工具 MyFlash 的使用。
3|0限制
MyFlash 工具存在如下限制:
- binlog 格式必须为 row,且 binlog_row_image = full
- 仅支持 5.6 与 5.7 版本的 MySQL
- 只能回滚 DML( 增、删、改 )操作
4|0下载安装
下载 MyFlash 安装包,将安装包安装于 /data 目录下,编译之前,先安装依赖包。
5|0用法
常用参数说明:
--databaseNames
指定需要回滚的数据库名。多个数据库可以用 “,” 隔开。如果不指定该参数,相当于指定了所有数据库。
--tableNames
指定需要回滚的表名。多个表可以用 “,” 隔开。如果不指定该参数,相当于指定了所有表。
--start-position
指定回滚开始的位置。如不指定,从文件的开始处回滚。请指定正确的有效的位置,否则无法回滚。
--stop-position
指定回滚结束的位置。如不指定,回滚到文件结尾。请指定正确的有效的位置,否则无法回滚。
--start-datetime
指定回滚的开始时间。注意格式必须是 %Y-%m-%d %H:%M:%S。如不指定,则不限定时间。
--stop-datetime
指定回滚的结束时间。注意格式必须是 %Y-%m-%d %H:%M:%S。如不指定,则不限定时间。
--sqlTypes
指定需要回滚的 sql 类型。目前支持的过滤类型是 INSERT, UPDATE, DELETE。多个类型可以用 “,” 隔开。
--maxSplitSize
指定解析分割后文件最大大小,单位为 M。
--binlogFileNames
指定需要回滚的 binlog 文件,如有多个,用 “,” 隔开。
--outBinlogFileNameBase
指定输出的 binlog 文件前缀,如不指定,则默认为 binlog_output_base.flashback。
--logLevel
指定输出的日志级别,可选级别有 debug, warning, error,默认级别为 error 级别。
--include-gtids
指定需要回滚的 gtid,支持 gtid 的单个和范围两种形式,如有多种形式,用 “,” 隔开。
--exclude-gtids
指定不需要回滚的 gtid,支持 gtid 的单个和范围两种形式,如有多种形式,用 “,” 隔开。
6|0测试用例
模拟在一个实例中,对 d1.t1 进行了 update 操作和 delete 操作,需要回滚 update 和 delete 操作场景。
原 d1.t1 表中数据如下:
进行了 update 和 delete 操作:
此时,期望回滚 update 和 delete 操作。先 flush binlog,切换 binlog 文件:
解析 binlog,查看对应 update 和 delete 操作,在 17:22:30 时进行 update 操作,在 17:23:35 时已经完成了delete 操作。
使用 MyFlash 工具进行回滚,进入到工具的安装目录,执行命令反向解析 binlog,指定要回滚的库、表、开始时间和结束时间,并指定反向解析的 SQL 语句类型:
查看到反向解析后的 binlog 文件,执行顺序为先回滚 delete 操作,将被删除的数据添加,再逆向 update 语句。
将反向解析的 binlog 文件语句回放到数据库中。由于所测试的实例中已经开启 gtid 模式,而反向解析出来的 binlog 文件中没有定义 @@SESSION.GTID_NEXT,直接执行会出现报错 “ERROR 1782 (HY000) at line 19: @@SESSION.GTID_NEXT cannot be set to ANONYMOUS when @@GLOBAL.GTID_MODE = ON.” ,所以需要添加 --skip-gtids 选项来执行回滚语句,加上 --skip-gtids 选项后解析出来的文件,会指定 SET @@SESSION.GTID_NEXT='AUTOMATIC' ,这样就可以回放成功了。
验证数据,数据已经恢复到 update 操作之前,完成回滚操作。
__EOF__

本文链接:https://www.cnblogs.com/caicz/p/15068913.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人