MySQL 使用 MyFlash 快速恢复误删除、误修改数据

发布时间:2026/10/27 18:19:20

MySQL 使用 MyFlash 快速恢复误删除、误修改数据 一、MyFlashMyFlash是由美团点评公司技术工程部开发并维护的一个开源工具主要用于MySQL数据库的DML操作的回滚。这个工具通过解析binlog日志帮助用户高效、方便地进行数据恢复。MyFlash的优势在于它提供了更多的过滤选项使得回滚操作变得更加容易。与其他数据恢复工具相比MyFlash无需将binlog解析成文本再进行转换而是提供了基于库、表、SQL类型、位置、时间等多种过滤方式。GitHub地址如下https://github.com/Meituan-Dianping/MyFlash本文将实验通过MyFlash工具快速恢复误删除 或 误修改的数据。注意要使用MyFlash前提需要将MySQL的binlog格式改为row且binlog_row_imagefull所以在下面实验前请确保MySQL开启了binlog并且binlog的格式正确showvariableslikelog_bin;SHOWVARIABLESLIKEbinlog_row_image;二、MyFlash 部署安装依赖环境yuminstallgcc glib2-devel-y下载MyFlash项目wgethttps://github.com/Meituan-Dianping/MyFlash/archive/master.zip解压unzipmaster.zip编译源文件cdMyFlash-mastergcc-wpkg-config--cflags--libsglib-2.0source/binlogParseGlib.c-obinary/flashback查看flashback命令./binary/flashback-h解释如下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的单个和范围两种形式如有多种形式用,隔开。三、测试环境构建创建测试库createdatabasetestdb;usetestdb;创建测试表CREATETABLEuser(idint(11)NOTNULLAUTO_INCREMENT,namevarchar(255)DEFAULTNULL,ageint(11)DEFAULTNULL,PRIMARYKEY(id))ENGINEInnoDBDEFAULTCHARSETutf8mb4;写入测试数据INSERTINTOtestdb.user(id,name,age)VALUES(1,张三,16);INSERTINTOtestdb.user(id,name,age)VALUES(2,赵六,17);INSERTINTOtestdb.user(id,name,age)VALUES(3,李四,18);INSERTINTOtestdb.user(id,name,age)VALUES(4,小明,19);INSERTINTOtestdb.user(id,name,age)VALUES(5,小李,20);四、数据误删除恢复假设不小心删除了age 17的数据deletefromuserwhereage17;查看当前binlog名称showmasterstatus;先生成一个新的binlog文件让后面的操作记录在新的binlog文件中flush logs;使用MyFlash反向解析刚才的mysql-bin.000004文件这个可以根据时间范围定位sqlTypes为DELETE类型./binary/flashback--databaseNamestestdb--tableNamesuser--start-datetime2024-06-15 14:35:30--stop-datetime2024-06-15 14:41:30--sqlTypesDELETE--binlogFileNames/var/lib/mysql/mysql-bin.000004--outBinlogFileNameBaseuser.sql执行后可以看到生成了一个user.sql.flashback回滚文件可以使用mysqlbinlog进行查看mysqlbinlog-vvuser.sql.flashback可以看出内容是INSERT操作用来恢复之前误删除的数据下面可以直接使用mysqlbinlog去执行其中的内容mysqlbinlog user.sql.flashback|mysql-uroot-proot下面查看数据是否被恢复数据成功恢复五、数据误修改恢复假设修改数据时忘了加where条件导致所有数据都被误修改updateusersetage99;下面做法和上面相似首先查看当前binlog名称showmasterstatus;同样生成一个新的binlog文件让后面的操作记录在新的binlog文件中flush logs;使用MyFlash反向解析刚才的mysql-bin.000005文件这个还是根据时间范围定位sqlTypes要改为UPDATE类型./binary/flashback--databaseNamestestdb--tableNamesuser--start-datetime2024-06-15 14:45:30--stop-datetime2024-06-15 14:50:30--sqlTypesUPDATE--binlogFileNames/var/lib/mysql/mysql-bin.000005--outBinlogFileNameBaseuser1.sql执行后可以看到生成了一个user1.sql.flashback回滚文件使用mysqlbinlog进行查看mysqlbinlog-vvuser1.sql.flashback可以看出是UPDATE操作用来恢复之前误修改的数据同样直接使用mysqlbinlog去执行其中的内容mysqlbinlog user1.sql.flashback|mysql-uroot-proot下面查看数据是否恢复数据成功恢复
延伸阅读

更多相关文章

2026/10/27 18:19:20

C语言:详解gcc驱动程序完成编译、汇编、链接的过程

相关阅读 C语言https://blog.csdn.net/weixin_45791458/category_12423166.html?spm1001.2014.3001.5482 gcc是一个命令,严格意义上说,它只是一个驱动程序,而不是一个编译器。gcc负责调用GNU工具链中的预处理器、编译器、汇编器、链接器等工…

2026/10/27 18:19:20

如何选择.NET架构?dotnet-claude-kit四架构顾问实战指南

【免费下载链接】dotnet-claude-kit Make Claude Code a .NET 10 Expert 项目地址: https://gitcode.com/gh_mirrors/do/dotnet-claude-kit 点击查看 免费下载 刚开始一个 .NET 项目时,最让人纠结的问题往往不是"用什么框架",而是…

2026/10/27 18:19:20

通信协议:常见的芯片间通信协议

相关阅读 通信协议https://blog.csdn.net/weixin_45791458/category_12452508.html?spm1001.2014.3001.5482 本文将简单介绍一些常见的芯片间通信协议,但不会涉及到协议的具体细节。首先说明,芯片间通信方式根据通信时钟的区别可以分为:异步…

2026/10/27 18:59:28

写一个扫雷代码

第一步先将菜单以及选项给呈现出来使用do....while来实现选项&#xff0c;因为只需要执行此选项即可&#xff0c;因此设置返回值为void#include<stdio.h> static void menu() {printf("****************\n");printf("***1.开始游戏***\n");printf(&q…

2026/10/27 18:59:28

从零到落地:基于 LangChain 的大模型应用开发全流程实战

从零到落地&#xff1a;基于 LangChain 的大模型应用开发全流程实战 很多人学习大模型开发时都会陷入一个误区&#xff1a;以为调用模型接口就是在做 AI 应用。实际接触过生产项目的人都知道&#xff0c;单纯调用 API 只能做出一个能对话的壳子&#xff0c;真正有价值的应用——…

2026/10/27 18:59:28

多智能体协作系统设计:编排模式、通信协议与工程落地

多智能体协作系统设计&#xff1a;编排模式、通信协议与工程落地 单个大模型智能体能力再强&#xff0c;也存在天然的边界&#xff1a;上下文窗口有限、无法同时胜任多个专业领域、单个智能体的决策链一旦出错就容易整体失败。多智能体协作系统的出现&#xff0c;正是为了用&qu…

2026/10/27 18:59:28

高职院校智慧体适能实训室建设

随着健康中国战略落地以及职业教育提质培优工作推进&#xff0c;运动健康指导、健身指导与管理、社会体育等专业&#xff0c;对理实一体化实训条件提出更高要求。传统体适能实训大多依靠常规健身器械&#xff0c;教学评价高度依赖授课教师经验判断&#xff0c;体测数据分散存储…

2026/10/27 18:59:28

开源项目stdlayout:每个项目从第一天起,就有同一套目录和 .gitignore

新建仓库的前十分钟,最容易埋雷 新开一个项目,前十分钟干的事,你闭着眼都能背出来。 建 src,建 tests,从上一个项目里翻出 .gitignore 复制过来,心想"差不多够用了",然后开始写代码。 雷就是在这十分钟里埋下的。 雷一:.gitignore 是抄来的 抄来的 .gitignore 是…

2026/10/27 18:54:28

ROM搜索算法对多个DS18B20进行地址读取

ROM搜索算法对多个DS18B20进行地址读取 ROM搜索算法是一个用于解决1-wire总线上多个器件地址寻址的算法&#xff1b;实际应用&#xff0c;假设在一条总线上挂载了多个 1-Wire器件、但主机不知道它们地址无法进行通信&#xff1b;此时可以通过ROM搜索算法枚举出每一个器件的64位…

2026/10/27 14:24:03

全国计算机二级C语言真题PDF高效刷题指南

简介&#xff1a;这份PDF是全国计算机二级C语言考试的试题与答案解析&#xff0c;专为备考二级C语言的考生准备。内容涵盖C语言特点与设计理念、程序基本组成单位、main函数执行流程、函数嵌套调用规则、标识符命名规范、整型实型字符型数据类型、八进制十六进制数合法形式、运…

2026/10/27 9:34:54

requests+BeautifulSoup:爬虫抓取h1标题的入门实战指南

简介&#xff1a;一份以实战为导向的Python爬虫入门资源&#xff0c;面向具备基本编程基础、希望快速掌握网络数据抓取的初学者&#xff0c;可解决从零编写简单爬虫的常见困惑。实例以requests库发送HTTP请求、BeautifulSoup解析HTML文档&#xff0c;完整演示从网页中提取 标题…

2026/10/27 0:59:21

递推最小二乘参数辨识MATLAB编程:二阶系统与渐消记忆实现

简介&#xff1a;这是一篇面向控制系统、信号处理与机器学习等领域学习者的最小二乘参数辨识程序说明文档。资源共包含一个docx格式文档&#xff0c;压缩包大小七十八KB&#xff0c;内容围绕递推最小二乘算法和渐消记忆最小二乘算法展开&#xff1a;先构造一个极点位于单位圆内…

2026/10/27 0:02:28

WorkBuddy_新建任务与工作模式19_“模式选错”的典型代价

“模式选错”的典型代价 摘要 在软件工程中&#xff0c;设计模式、架构模式、并发模式乃至团队协作模式的选择&#xff0c;往往在项目早期就决定了后续的开发效率和维护成本。本文通过多个真实场景&#xff0c;剖析“模式选错”带来的典型代价——包括返工成本、技术债务累积、…

2026/10/27 0:02:28

WorkBuddy_新建任务与工作模式20_新手推荐路径

新手推荐路径 摘要 在 AI 辅助开发工具快速普及的今天&#xff0c;新手面对最多的困惑往往不是"工具够不够强"&#xff0c;而是"我该从哪一步开始用"。本文提出一条经过实践验证的三阶段学习路径&#xff1a;先从 Ask&#xff08;问答式交互&#xff09;起…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑