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

发布时间:2026/10/27 18:19:37
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下面查看数据是否恢复数据成功恢复

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询