以下是 myflash 数据恢复工具的使用示例,分为误删除数据恢复和误修改数据恢复两种情况:
- 误删除数据恢复:
- 构建测试环境:
- 创建测试数据库和表。假设你已经安装并启动了 MySQL 服务,登录到 MySQL 客户端,执行以下语句创建一个名为 testdb 的数据库和一个名为 user 的表:
sql
CREATE DATABASE testdb;
USE testdb;
CREATE TABLE user
(id
INT(11) NOT NULL AUTO_INCREMENT,name
VARCHAR(255) DEFAULT NULL,age
INT(11) DEFAULT NULL,
PRIMARY KEY (id
)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
- 向表中插入测试数据:
sql
INSERT INTO testdb
.user
(id
, name
, age
) VALUES (1, ‘张三’, 16);
INSERT INTO testdb
.user
(id
, name
, age
) VALUES (2, ‘赵六’, 17);
INSERT INTO testdb
.user
(id
, name
, age
) VALUES (3, ‘李四’, 18);
INSERT INTO testdb
.user
(id
, name
, age
) VALUES (4, ‘小明’, 19);
INSERT INTO testdb
.user
(id
, name
, age
) VALUES (5, ‘小李’, 20);
- 模拟误删除操作:
- 假设不小心删除了 age>17 的数据,执行以下删除语句:
sql
DELETE FROM user WHERE age > 17;
- 使用 myflash 进行数据恢复:
- 查看当前的 binlog 名称(以便后续指定要恢复的 binlog 文件),执行 SHOW MASTER STATUS; 命令,记录下 File 列的值,假设为 mysql-bin.000004 (实际文件名根据你的 MySQL 配置可能会有所不同)。
- 生成一个新的 binlog 文件,让后面的操作记录在新的 binlog 文件中,执行 FLUSH LOGS; 命令。
- 使用 myflash 反向解析刚才的 mysql-bin.000004 文件。假设要恢复的时间范围是误删除操作发生的时间段,例如从 2024-06-15 14:35:30 到 2024-06-15 14:41:30 ,并且 sqltypes 为 delete 类型(因为要回滚删除操作),在命令行中执行以下命令(请根据实际情况修改文件路径和时间等参数):
./binary/flashback --databasenames=“testdb” --tablenames=“user” --start-datetime=“2024-06-15 14:35:30” --stop-datetime=“2024-06-15 14:41:30” --sqltypes=“delete” --binlogfilenames=/var/lib/mysql/mysql-bin.000004 --outbinlogfilenamebase=user.sql
执行后会生成一个 user.sql.flashback 回滚文件。
- 查看并恢复数据:
- 使用 mysqlbinlog 查看生成的回滚文件:
mysqlbinlog -vv user.sql.flashback
可以看到文件中的内容是 insert 操作,用来恢复之前误删除的数据。
- 直接使用 mysqlbinlog 去执行其中的内容,将数据恢复到数据库中:
mysqlbinlog user.sql.flashback | mysql -uroot -proot
最后,查看数据是否被成功恢复。
- 误修改数据恢复:
- 构建测试环境并模拟误修改操作:
- 重复上述测试环境构建中的步骤,创建测试数据库和表,并插入测试数据。
- 假设修改数据时忘了加 where 条件,导致所有数据的 age 字段都被误修改为 99 ,执行以下更新语句:
sql
UPDATE user SET age = 99;
- 使用 myflash 进行数据恢复:
- 查看当前的 binlog 名称,执行 SHOW MASTER STATUS; 命令,记录下 File 列的值。
- 生成一个新的 binlog 文件,执行 FLUSH LOGS; 命令。
- 使用 myflash 反向解析刚才的 binlog 文件,根据时间范围定位误修改操作的时间段,并且 sqltypes 改为 update 类型(因为要回滚更新操作),执行类似如下命令(请根据实际情况修改文件路径和时间等参数):
./binary/flashback --databasenames=“testdb” --tablenames=“user” --start-datetime=“误修改操作开始时间” --stop-datetime=“误修改操作结束时间” --sqltypes=“update” --binlogfilenames=“binlog 文件路径” --outbinlogfilenamebase=user_update.sql
- 查看并恢复数据:
- 使用 mysqlbinlog 查看生成的回滚文件。
- 使用 mysqlbinlog 执行回滚文件中的内容,将数据恢复到数据库中。
- 查看数据是否被成功恢复。
在使用 myflash 时,需要注意 MySQL 的 binlog 格式必须为 row ,且 binlog_row_image=full 。并且,在实际操作中,要确保指定的时间范围、 binlog 文件路径、数据库名、表名等参数的准确性,以免恢复数据失败或恢复到错误的数据。