这是 DBRecover for MySQL v2605 官方 GUI 用户手册。DBRecover for MySQL 是免费软件,可自由使用,无需购买许可证。请尽量在复制出的数据库文件上操作。 DBRECOVER for MySQL

本手册说明如何使用 DBRecover for MySQL 图形界面,从离线 MySQL 文件中恢复表结构和数据行。本文面向需要执行数据恢复的操作人员,而不是面向扩展本工具的开发人员。

截图展示主要 GUI 操作以及每一步完成后的预期结果。请尽量在复制出的文件上操作,不要直接修改原始介质。

开始之前

请根据恢复场景准备对应文件:

  • MySQL 8.x 单表恢复:目标表的 .ibd 文件。
  • MySQL 8.x datadir 恢复:包含 schema 目录和 mysql.ibd 的 datadir。
  • MySQL 5.x 或 MariaDB 单表恢复:目标表 .ibd 文件以及匹配的 .frm 文件。
  • MySQL 5.x 或 MariaDB datadir 恢复:ibdata1、schema 目录、.frm 文件以及表数据文件。
  • 已删除表恢复:mysql.ibdibdata1 或 DD .page 文件;如果能提供原始 datadir 或雕刻出的 page 目录,导出效果会更好。
  • 磁盘镜像扫描:raw 磁盘镜像、文件系统镜像或复制出的块设备镜像。

dbrecoverj 目录下启动 GUI:

bash
java -jar target/dbrecoverj-2605-gui.jar

主窗口包含四个工作区:

  1. 顶部菜单和工具栏,用于打开文件、运行恢复工具、导出结果。
  2. 左侧 Navigator,用于查看项目、文件、schema 和 table。
  3. 中间内容区,用于查看 DataColumnsDDLSDIInfo
  4. 底部 Log 面板,用于查看进度、警告和导出路径。
Main window
Main window

场景 1:选择正确的恢复流程

当你不确定当前文件应该走哪条恢复路径时,先使用 Recovery Wizard。

操作流程

  1. 打开 GUI。
  2. 选择 Tools > Recovery Wizard...
  3. 在第 1 步选择与输入文件匹配的恢复模式。
Recovery wizard step 1
Recovery wizard step 1
  1. 点击 Next
  2. 在第 2 步选择 MySQL 版本系列和 page size。
  3. 除非明确知道源实例使用了其他 InnoDB page size,否则保持 16384
Recovery wizard step 2
Recovery wizard step 2
  1. 点击 Next
  2. 在第 3 步添加当前模式所需的文件或目录。
  3. 点击 Start
  4. 在 Log 面板查看扫描结果和警告。
  5. 当 Navigator 中出现恢复出的 schema 或 table 后,继续按下面对应场景进行预览和导出。
Recovery wizard step 3
Recovery wizard step 3

场景 2:恢复单个 MySQL 8.x .ibd

当你有一个独立的 MySQL 8.x .ibd 文件时使用本场景。MySQL 8.x 表通常带有 SDI 元数据,因此 DBRecover 通常可以在没有 .frm 文件的情况下识别表结构。

操作流程

  1. 选择 File > Open File...,或点击工具栏中的 Open File
  2. 选择 .ibd 文件。
  3. 文件会出现在 Navigator > IBD 下。
  4. 选择该 .ibd 节点。
  5. 确认 SDI 标签页包含元数据。如果文件下没有出现 table,请检查 Log 面板中的 page size 或 SDI 警告。
Open IBD and view SDI
Open IBD and view SDI
  1. 在 Navigator 中展开 .ibd 节点。
  2. 选择 table 节点。
  3. 打开 Data 标签页。
  4. 先把 Rows 设置为较小的预览值,例如 1000
  5. 只有在需要查看已删除记录时才启用 Include deleted
  6. 修改预览选项后点击 Reload
Table data preview
Table data preview
  1. 打开 DDL 标签页,检查生成的 CREATE TABLE 语句。
  2. 如果表名、列或索引明显不对,请停止操作并确认 .ibd 文件是否来自正确的源表。
Table DDL
Table DDL
  1. 打开 Columns 标签页。
  2. 导出前检查列名、类型、可空性、默认值、生成列和索引。
Table columns
Table columns
  1. 打开 Info 标签页。
  2. 检查文件大小、page 数量、page 类型、SDI 状态、row format、charset 和检测到的表特性。
Table info
Table info

导出恢复出的表

  1. 在 Navigator 中选择 table 节点。
  2. 导出 DDL 时,点击工具栏 Export DDL,或右键 table 选择 Export DDL...
  3. 导出 SQL 行数据时,点击 Export Data 或选择 Export Data...
  4. 导出 CSV 时,点击 Export CSV 或选择 Export CSV...
Table context menu export actions
Table context menu export actions
  1. 按提示选择目标文件。
  2. 等待 Log 面板显示绿色成功信息。
  3. 使用导出文件前,请先检查行数、文本编码和代表性记录。

场景 3:从 MySQL 8.x datadir 批量恢复表

当你有 MySQL 8.x datadir,并希望一次恢复多张表时,使用 Dictionary Mode。

操作流程

  1. 选择 Tools > MySQL8 Dictionary Mode...
  2. 在对话框中确认 datadir 路径。
  3. 点击 Scan
  4. 等待表列表填充完成。
  5. 检查识别出的 schema 名、table 名和警告。
  6. 点击 Export All DDL... 导出表结构。
  7. 点击 Export All Data... 导出 SQL 数据文件。
  8. 点击 Export All CSV... 导出 CSV 文件。
  9. 如果需要按 schema 生成可导入 dump,点击 Export Schema Dump...
  10. 每次导出时选择输出目录。
  11. 每次导出后检查 Log 面板和输出文件。
MySQL 8 dictionary mode
MySQL 8 dictionary mode

推荐检查

  1. 先导出 DDL。
  2. 抽查几张大表和小表。
  3. 对大型 datadir,先导出一小批 CSV 进行验证。
  4. 如果需要先限制输出规模,在 Preferences 中设置行数限制。

场景 4:使用 .frm 恢复单个 MySQL 5.x 或 MariaDB .ibd

当源表来自 MySQL 5.x 或 MariaDB 时使用本场景。这类表没有 MySQL 8 SDI 元数据,因此 DBRecover 需要匹配的 .frm 文件,或兼容的 CREATE TABLE 语句。

先检查 .frm 文件

  1. 选择 File > Open .frm File (MySQL 5.x)...
  2. 选择属于目标表的 .frm 文件。
  3. 检查生成的 DDL。
  4. 打开 FRM 结果对话框中的 Columns 标签页,确认字段列表。
  5. 检查结构后关闭对话框。
FRM parse result
FRM parse result

.frm.ibd 关联

  1. 选择 File > Open File...
  2. 选择 MySQL 5.x 或 MariaDB .ibd 文件。
  3. 在 Navigator 中右键 .ibd 节点。
  4. 选择 Associate .frm File (MySQL 5.x)...
  5. 选择匹配的 .frm 文件。
  6. 展开 .ibd 节点。
  7. 选择由 .frm 创建出的 table 节点。
  8. 与 MySQL 8 单表场景一样,依次查看 DDLColumnsDataInfo
MySQL 5 FRM DDL
MySQL 5 FRM DDL

导出表

  1. 选择 table 节点。
  2. 先导出 DDL。
  3. Data 标签页用较小行数预览数据。
  4. 预览正确后导出 SQL 或 CSV。
  5. 如果值错位到错误列,请确认 .frm 文件来自完全相同的表定义。

场景 5:恢复 MySQL 5.x 或 MariaDB datadir

当你拥有包含 ibdata1.frm 和表数据文件的 datadir 时使用本流程。

操作流程

  1. 选择 Tools > MariaDB/MySQL5 Datadir Recovery...
  2. 选择源 datadir。
  3. 如果已经从磁盘镜像雕刻出 .page 文件,选择 page set 根目录作为搜索根。
  4. 点击 Analyze
  5. 等待表列表和状态信息生成。
  6. 检查表列表和警告。
  7. 点击 Export DDL...Export Data...Export CSV...Export Schema Dump...
  8. 选择输出目录。
  9. 在 Log 面板查看被跳过的表或缺失 .frm 的提示。
MySQL 5 datadir recovery
MySQL 5 datadir recovery

推荐检查

  1. 确认 ibdata1.frm.ibd 文件来自同一个 datadir。
  2. 先导出 DDL,确认表名和列定义。
  3. 用 CSV 快速抽查数据。
  4. 如果希望每个 schema 得到一个可导入输出,使用 schema dump。

场景 6:恢复已删除表或已删除数据库

当表被 drop 后,但元数据仍可能存在于 mysql.ibdibdata1 或雕刻出的数据字典 page 中时,使用 Drop Recovery。

操作流程

  1. 选择 Tools > Drop Recovery...
  2. 选择字典来源:
  • MySQL 8:mysql.ibd 或恢复出的 DD .page 文件目录。
  • MySQL 5.x/MariaDB:ibdata1
  1. 如果可用,选择 datadir。这有助于 DBRecover 定位表 .ibd 文件并导出数据。
  2. 当原始表文件缺失时,选择雕刻出的 page root。
  3. 点击 Analyze
  4. 检查恢复出的 schema 和已删除表。
  5. 选择一张表。
  6. 先导出 DDL。
  7. 如果表 page 可用,再导出 SQL 或 CSV。
  8. 如果需要所有检测到的已删除表,使用批量导出。
Drop recovery
Drop recovery

推荐检查

  1. 将已删除表恢复视为 best effort。
  2. 如果原始 datadir 仍可用,优先使用原始 datadir。
  3. 只有在原始表文件缺失或损坏时才使用雕刻 page。
  4. 查看 Log 面板,确认哪些表只有元数据、没有可用数据 page。

场景 7:从磁盘镜像雕刻 InnoDB page

当你没有干净的 .ibd 文件,但有 raw 磁盘镜像或文件系统镜像时,使用 Disk Image Scan。

操作流程

  1. 选择 Tools > Disk Image Scan...
  2. 选择磁盘镜像文件。
  3. 选择一个空输出目录。
  4. 确认 page size。除非源实例使用了其他 InnoDB page size,否则使用 16384
  5. 确认 scan step。更小的 step 能找到更多 page,但耗时更长。
  6. 首次扫描建议保留 leaf-only 扫描,以获得更快结果。
  7. 点击 Scan
  8. 等待扫描完成。
  9. 点击 Dictionary Recovery... 继续处理恢复出的 page set,或打开 Tools > Drop Recovery... 并使用扫描输出作为 page root。
Disk image scan
Disk image scan

推荐检查

  1. 输出目录应有足够可用空间。
  2. 原始磁盘镜像保持只读。
  3. 先执行快速 leaf-page 扫描。
  4. 如果重要表缺失,再用更小 step 重新扫描。

场景 8:直接打开目录

当你希望 Navigator 直接列出某个目录中的 .ibd.MYD.page 文件,而不启动完整恢复向导时使用本流程。

操作流程

  1. 选择 File > Open Directory...,或点击工具栏 Open Directory
  2. 选择要扫描的文件夹。
  3. 该目录会出现在 Navigator 中。
  4. 展开目录节点。
  5. 选择 table 或 file 节点。
  6. 根据可用情况查看 DataColumnsDDLSDIInfo
  7. 对没有自动识别结构的 MySQL 5.x 文件,右键文件并选择 Associate .frm File (MySQL 5.x)...Associate DDL (CREATE TABLE)...
  8. 预览和 DDL 检查正确后,从所选 table 节点导出。
Open directory result
Open directory result

场景 9:配置导出、预览和语言偏好

在大型导出前、需要稳定 SQL 输出时,或需要切换 GUI 语言时使用 Preferences。

操作流程

  1. 选择 Tools > Preferences...
  2. Export 分类中设置默认导出行数限制。
  3. 如果希望 SQL 输出中包含列名,启用完整 INSERT 语句。
  4. 只有目标导入流程要求时才启用 REPLACE 输出。
  5. 只有明确要恢复已删除记录时才启用已删除行导出。
  6. Data View 分类中设置默认预览行数。
  7. Language 分类中选择 System languageEnglishChinese (Simplified)JapaneseSpanish
  8. 点击 ApplyOK。如果已打开窗口仍显示旧语言,请重新打开窗口或重启应用。
Preferences
Preferences

场景 10:验证并使用导出文件

在导入生产环境前,务必先验证导出结果。

操作流程

  1. 打开导出的 DDL。
  2. 确认 schema 名、table 名、engine、charset、列和索引。
  3. 打开导出的 SQL 或 CSV。
  4. 检查表头、行数、NULL 值、二进制值、日期和文本编码。
  5. 先导入临时数据库。
  6. 对比行数和代表性记录。
  7. 如果第一次导出没有包含目标记录,可调整行数限制或启用 Include deleted 后重新导出。

故障排查

现象检查项
.ibd 文件下没有出现 table确认文件是否为带 SDI 的 MySQL 8 文件;MySQL 5.x 需要关联匹配 .frm 或 DDL。
Data 标签页有列但没有行检查 page size、表结构,以及表文件中是否确实包含 clustered index pages。
GUI 中的文本显示异常检查 ColumnsInfo 中的 charset/collation,然后用支持 UTF-8 的编辑器验证 CSV 导出。
导出文件过大Preferences 中设置行数限制后重新导出。
找到已删除表 DDL 但没有数据提供原始 datadir 或雕刻出的 page root,帮助 DBRecover 定位表 page。
磁盘扫描找到的 page 很少确认 page size 和 scan step;如果镜像不是 page 对齐,可尝试更小 step。

截图索引

  • 01-main-window-welcome.png:主窗口。
  • 02-open-ibd-sdi.png:打开带 SDI 的 MySQL 8 .ibd 文件。
  • 03-table-data.png:表数据预览。
  • 04-table-ddl.png:生成的表 DDL。
  • 05-table-columns.png:列列表。
  • 06-recovery-wizard-step1.png:Recovery Wizard 模式选择。
  • 07-recovery-wizard-step2.png:Recovery Wizard 版本和 page size。
  • 08-recovery-wizard-step3.png:Recovery Wizard 数据源选择。
  • 09-preferences.png:Preferences 对话框。
  • 10-disk-image-scan.png:Disk Image Scan 对话框。
  • 11-drop-recovery.png:Drop Recovery 对话框。
  • 12-mysql8-dictionary-mode.png:MySQL 8 Dictionary Mode 对话框。
  • 13-mysql5-datadir-recovery.png:MySQL 5.x/MariaDB Datadir Recovery 对话框。
  • 14-frm-parse-result.png:直接解析 .frm 的结果。
  • 15-mysql5-frm-ddl.png:由 .frm 生成的 MySQL 5.x DDL。
  • 16-table-info.png:文件和表信息标签页。
  • 17-open-directory.png:直接打开目录的结果。
  • 18-table-context-menu.png:包含预览和导出操作的 table 右键菜单。