是,残留.ibd文件中大于512kb的文件可能存在未加密的中间页段;勒索病毒常采用头尾加密(各256kb),中间数据页大概率完好,可用mysql_innodb_page_stream -s 262144跳过前256kb扫描提取有效页。

确认残留的.ibd文件是否还有可读页段
勒索病毒(如Loki、.malox)对InnoDB .ibd 文件通常采用“头尾加密”策略:只加密前256KB和后256KB,中间的数据页(page)大概率未被覆盖。这点很关键——不是全文件报废,而是“夹心层”可能完好。
实操建议:
- 用
ls -l查看.ibd文件大小,大于 512KB 的才值得抢救;小于该值基本整块被毁 - 用
hexdump -C t1.ibd | head -20和tail -20对比首尾,若开头明显乱码(如全是0x89 0x50 0x4e 0x47类非InnoDB magic)而中间出现重复的0x45 0x42 0x30 0x31(InnoDB page header signature),说明中间页存活 - 别直接在原库上挂载——
.ibd文件一旦被MySQL加载,写入操作会覆盖未加密页,必须离线处理
用mysql_innodb_page_stream提取有效页并验证结构
mysql_innodb_page_stream 是 Percona Data Recovery Tool for InnoDB 的核心工具,它不依赖 MySQL 实例,纯解析二进制页流。它的作用不是“修复文件”,而是把散落在损坏 .ibd 中的合法页按顺序捞出来。
常见错误现象:直接运行 mysql_innodb_page_stream -f t1.ibd 报 “invalid page type”,其实是因页偏移错位或加密头干扰导致初始页识别失败。
实操建议:
- 加
-s 262144跳过前256KB(即 256 × 1024 字节),强制从第257KB开始扫描:mysql_innodb_page_stream -f t1.ibd -s 262144 > pages.raw - 输出的
pages.raw是原始页流,需配合mysql_innodb_salvage_dul-V2.8.exe(Windows)或innodb_recovery(Linux版)进一步解析为行记录 - 先试小表:挑一个字段少、无BLOB的表做首轮验证,避免一上来就处理千万级大表导致内存溢出或解析超时
从残留FRM文件中恢复表结构(尤其MySQL 5.7及更早)
MySQL 5.7 及之前版本的 .frm 文件是独立存储的,且多数勒索病毒不会加密它(或仅加密头部)。哪怕 .frm 被部分破坏,仍可用 mysqlfrm 工具提取字段定义。
注意:MySQL 8.0+ 已将元数据存入数据字典表,.frm 不再存在,此法失效。
实操建议:
- 运行
mysqlfrm --server=none --diagnostic t1.frm,若输出中含CREATE TABLE片段,说明结构可恢复 - 若报错 “Unknown table engine”,说明
.frm头部损坏,改用strings t1.frm | grep -A 10 -B 5 "CREATE"手动抓取残留SQL片段 - 生成的建表语句里,务必手动补全
ENGINE=InnoDB ROW_FORMAT=DYNAMIC等关键参数,否则导入时可能因格式不匹配拒绝加载
绕过MySQL实例,用binlog拼凑最后窗口期数据
如果 binlog 文件没被删除、且格式未被篡改(勒索程序常忽略它),它是唯一能补上“加密时刻到感染前最后一秒”之间增量的来源。
性能影响:解析大 binlog(>1GB)非常耗时,mysqlbinlog --base64-output=DECODE-ROWS -v 输出可能达数十GB文本,磁盘空间要预留充足。
实操建议:
- 先用
mysqlbinlog --no-defaults --base64-output=DECODE-ROWS -v mysql-bin.000012 | head -100确认日志开头有正常事件(如### INSERT INTO `db`.`t1`),排除被追加垃圾数据的情况 - 定位误删/加密时间点:查应用日志或系统审计日志(
/var/log/audit/audit.log)中mysqld进程异常启动时间,反推 binlog 位置 - 导出时加
--stop-datetime="2026-10-12 14:23:00"截断,避免包含加密后的恶意语句(如DROP DATABASE或UPDATE ... SET col=ENCRYPT(...))
真正难的不是工具调用,而是判断哪一段 .ibd 页还能用、哪一行 binlog 事件可信——这些没法自动化,得靠人工交叉比对碎片里的主键范围、时间戳、字段长度特征。稍一疏忽,恢复出来的就是半截ID或乱码字段。











