MySQL数据库恢复-勒索病毒 PLEASE_READ_ME_VVV、delete、drop,没有binlog 数据库恢复工具 持续更新2020.5.27

目录

MySQL恢复的难点

本文研究范围

MySQL InnoDB引擎存储结构分析

MySQL数据碎片抽取代码实现

MySQL数据碎片恢复实践


MySQL恢复的难点

MySQL一旦出现误删除(drop整个库、delete表truncate 表、清空表)、误覆盖(老备份恢复新数据)、勒索病毒恶意破坏等,如PLEASE_READ_ME_VVV病毒,一般用文件级恢复工具(比如DiskGen、UFS Explorer等)都无法恢复较大的表空间,这是因为对大于4MB的文件,不管是在Linux内核还是Windows内核,都很容易被新的文件覆盖。

而特别对于数据库,因为表空间的缓慢增长的,这列导致其数据块在磁盘上呈离散碎片化分布,用常规文件方案,不可能完整恢复。


本文研究范围

MySQL常用的存储引擎为MyISAM和InnoDB,对应的存储文件后缀名分别是.MYD和.IBD。MySQL5.5版本开始Innodb已经成为Mysql的默认引擎(之前是MyISAM)。

本文主要讨论在InnoDB引擎下,不依赖文件系统,直接从磁盘扇区中,抽取恢复MySQL数据行碎片的技术方案及工具实现。


MySQL InnoDB引擎存储结构分析

表空间层级结构为:

一个MySQL系统中,可创建多个数据库实例,对应为data目录下以数据库名命名的目录

多个Tablespace组成一个数据库实例

多个Segment组成一个Tablespace

多个Extent组成一个Segment

多个Page组成一个Extent

多行Row组成一个Page

一行数据的所有Field组成一行Row,

如下图所示:


MySQL数据碎片抽取代码实现

根据MySQL IBD文件结构,我们构建了智能分析IBD碎片页的代码,核心代码如下:

打开源文件代码:仅申请了READ权限,以确保对源文件是只读访问,杜绝二次破坏!

主体功能实现类:此类实现了从源路径中搜索所有SQL碎片,以及输出SQL碎片到本地文件,并且最后自动将碎片文件转化为INSERT INTO 语句,以便可以导入到生产数据库中:


MySQL数据碎片恢复实践

  1. 将DATAUNIT_MySQL_RESTORE.exe工具放在有足够可用空间的目录下。如果需要从某分区中搜索碎片,如D盘,则一定不能将工具放在D盘,切记!
  2. 运行DATAUNIT_MySQL_RESTORE.exe工具,如果提示缺少dll,请安装vc_redist.2015x64.exe
  3. 支持以下4种数据源:
  • 裸磁盘(整个磁盘):直接输入磁盘序号,如下图,以管理员权限运行工具,输入数字2,则扫描磁盘2。注意windows的磁盘从0开始编号

  • 分区:以管理员身份运行工具,输入盘符,如D

  • 镜像文件(裸磁盘或分区的镜像文件,支持任意文件系统,如ext3、ext4、XFS、NTFS、VMFS5、VMFS6、vmdk、VHD文件,等等):用鼠标,直接将文件拖入cmd窗口即可
  • 残缺的ibd文件:用鼠标,直接将文件拖入cmd窗口即可

注意本工具不支持加密的文件、加密的分区、压缩包。

按下回车开始扫描,工具自动输出搜索中找到的碎片及碎片中记录的数量,并同步输出到PAGE_FILE目录下:

免费版会将所有数据碎片保存在PAGE_FILE/page.bin,frm碎片保存在PAGE_FILE/frm.bin,以及恢复日志保存在PAGE_FILE/search.log中,如需要进一步恢复,请将以上3个文件压缩打包后,发送到作者的邮箱,紧急情况可联系作者QQ:568229095,工作时间8小时内反馈初步结论。


更新记录:

2020-1-6:
1、支持从裸磁盘、分区、文件中搜索所有IBD page碎片
2、修复打开磁盘、分区提示被占用的问题
3、工具运行自动创建工作目录,ibd和日志文件输出到工作目录
4、优化显示提示信息

2020-2-28:
1、全新的日志输出对象
2、支持指定源文件的起止搜索范围
3、支持跳过磁盘错误
4、修复磁盘大小获取不正确的bug
5、修复逻辑卷大小获取不正确的bug

 2020-03-2 :
1、支持识别ibdata1的page
2、完善输出日志,搜索完成后输出所有表的page数和record数
3、修复磁盘故障时不会返回的bug
2020-03-10:
1、修复磁盘异常时会循环读一处位置的bug
2、支持搜索zip文件
3、支持搜索frm文件
4、默认单文件输出

2020-03-16:
1、可单独指定搜索zip/frm

DATAUNIT_MYSQL_RESTORE v2.3.1 ( 2020-03-19 ,by data-unit.com )
1、可指定搜索输出的缓冲区大小,默认100MB

DATAUNIT_MYSQL_RESTORE v3.0 ( 2020-04-14 ,by data-unit.com )
1、支持共享表空间恢复

DATAUNIT_MYSQL_RESTORE_v4.0 (2020-05-26 ,by data-unit.com)
1、支持解析完整表名,并输出到日志文件
2、完善ibd文件头结构FILE_HEADER
 

下载链接:

链接:https://pan.baidu.com/s/1BzixbsZYplC-M1eSrSw7Ag
提取码:9ibf


技术支持

温馨提示:如重要数据丢失,建议在行动前咨询专业工程师,以免数据遭到二次破坏。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

数据恢复专家

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值