本文档为 DBRECOVER for MySQL 官方用户手册。可通过左侧目录跳转到具体的恢复场景;如需了解端到端的整体流程,建议从头到尾通读。
概述
DBRECOVER for MySQL 是一款 MySQL/InnoDB 数据恢复工具。在没有可用备份的情况下,它能够从实例崩溃、InnoDB 数据字典损坏导致数据库无法启动、DROP DATABASE、DROP TABLE、TRUNCATE TABLE、行级 DELETE,以及磁盘或文件系统损坏等故障中恢复数据。
主要特性:
- 图形化用户界面,无需命令行操作。
- 支持 MySQL 5.1 至 8.0,包括全新的 MySQL 8.0 数据字典。
- 仅支持 InnoDB 存储引擎。
- 支持 DROP DATABASE、DROP TABLE、TRUNCATE TABLE 与行级 DELETE 之后的数据恢复。
- 支持磁盘故障与文件系统损坏后的数据恢复。
- 能够读取 FRM 文件并将其还原为 CREATE TABLE 语句。
- 支持大对象(LOB / TEXT)数据的恢复。
- 恢复结果以 MYSQLDUMP 格式 SQL 文件输出。
- 基于 Java,可在 Windows、Red Hat、CentOS 与 Ubuntu 上运行。
- 免费试用限制:每张表最多 1,000 行;恢复 DELETE 删除的数据时,最多 100 行。






当 DBRECOVER 输出 MYSQLDUMP 格式的 SQL 后,可将其重新导入 MySQL 并核对行数:
mysql -uroot -p < actor.sql
Enter password: ********
mysql -uroot -p
Enter password: ********
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 13
Server version: 8.0.14 MySQL Community Server - GPL
Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> use employees;
Database changed
mysql> select count(*) from actor;
+----------+
| count(*) |
+----------+
| 200 |
+----------+
1 row in set (0.00 sec)从 DROP DATABASE 场景恢复
为演示效果,先复现该故障:
mysql> drop database employees;
Query OK, 14 rows affected (0.16 sec)
#sync
#sync- 启动 DBRECOVER for MySQL 软件,选择 DROP DATABASE recovery scenario(DROP DATABASE 恢复场景)。

- 选择正确的 MySQL 数据库版本。

- 选择 SELECT DIRECTORY(选择目录),输入
@@datadir目录的路径,然后点击 Start(开始)。

- 软件将扫描
ibdata1或mysql.ibd文件,以及@@datadir所在的磁盘。

- 点击已删除数据库节点,即可在被删除的数据库中查找并恢复表。

从 DROP TABLE 与 TRUNCATE TABLE 场景恢复
这里介绍的恢复步骤同时适用于 DROP TABLE 与 TRUNCATE TABLE 场景。首先复现故障:
mysql> select count(*) from employees.employees;
+----------+
| count(*) |
+----------+
| 300024 |
+----------+
1 row in set (0.09 sec)
mysql> select @@datadir;
+-----------+
| @@datadir |
+-----------+
| /m01/ |
+-----------+
1 row in set (0.00 sec)
mysql> drop table employees.employees;
ERROR 1217 (23000): Cannot delete or update a parent row: a foreign key constraint fails
mysql> SET FOREIGN_KEY_CHECKS=0;
Query OK, 0 rows affected (0.00 sec)
mysql> drop table employees.employees;
Query OK, 0 rows affected (0.02 sec)
mysql> ^DBye
#sync
#sync
- 启动软件并选择 DROP TABLE 恢复场景。

- 选择正确的 MySQL 数据库版本。

- 选择 SELECT DIRECTORY(选择目录),输入
@@datadir目录的路径,然后点击 Start(开始)。

- 软件将扫描
ibdata1或mysql.ibd文件,以及@@datadir所在的磁盘。
重要提示:请将 DBRECOVER 指向原始的 @@datadir,而不是故障发生后复制出来的副本。DBRECOVER 会扫描 @@datadir 挂载点的文件系统以查找被删除的数据,复制后的目录会丢失文件系统层面的关键信息。

- 点击对应数据库下的已删除表节点,查看被删除的表是否仍可恢复。

对于 TRUNCATE TABLE,表仍位于其正常的数据库节点之下——在树形结构中展开即可查看并导出数据。
表的内容会显示在界面右侧,按照标准的导出流程操作即可。
恢复被 DELETE 语句删除的数据行
当数据行被误执行的 DELETE 语句删除后,可借助 DBRECOVER for MySQL 的数据反删除功能进行恢复。首先复现故障:
mysql> use employees;
Database changed
mysql> select count(*) from employees;
+----------+
| count(*) |
+----------+
| 1000 |
+----------+
1 row in set (0.00 sec)
mysql> delete from employees;
mysql> flush table employees with read lock;
Query OK, 0 rows affected (0.01 sec)- 定位对应的
.ibd文件,例如employees表对应的employees.ibd。 - 启动 DBRECOVER for MySQL,在起始菜单中选择 Add ibd file(添加 ibd 文件),添加该 ibd 文件。

- 右键点击该 ibd 文件并选择 Scan(扫描)。扫描完成后会出现对应的页文件。


- 右键点击并粘贴该表的
CREATE TABLE语句(可在 MySQL 中通过SHOW CREATE TABLE获取)。
mysql> show create table employees;
+-----------+-----------------------------------------------------------------------------------+
| Table | Create Table |
+-----------+-----------------------------------------------------------------------------------+
| employees | CREATE TABLE `employees` (
`emp_no` int(11) NOT NULL,
`birth_date` date NOT NULL,
`first_name` varchar(14) NOT NULL,
`last_name` varchar(16) NOT NULL,
`gender` enum('M','F') NOT NULL,
`hire_date` date NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1 |
+-----------+-----------------------------------------------------------------------------------+
1 row in set (0.01 sec)
- 点击 Confirm(确认)。表会出现在右侧;点击 Deleted Data(已删除数据)查看可恢复的数据行。

- 点击 Export to file(导出到文件),将被删除的数据以 MYSQLDUMP 格式的 INSERT 语句恢复出来。

将 FRM 文件转换为 CREATE TABLE SQL
DBRECOVER for MySQL 可以免费读取 FRM 文件并将其还原为 CREATE TABLE 语句——无需任何许可证。

- 在软件主界面选择 Add frm file(添加 frm 文件)。
- 双击已添加的 FRM 文件(或右键查看)。重建出的
CREATE TABLE语句会显示在界面右侧,可直接复制。

查看数据表的可恢复行数
该功能可显示 DBRECOVER 能够从某张表中恢复的数据行数——便于在购买许可证前评估恢复规模。
右键点击表,并选择 Show Table Recoverable Row Count(显示表可恢复行数)。


如本手册未涵盖您遇到的恢复场景,或您希望获得付费恢复支持,请联系 liu.maclean@gmail.com,或访问 DBRECOVER for MySQL 价格页面。