首页 > 数据库 >myflash MySQL数据恢复工具的使用示例:误删除数据恢复和误修改数据恢复两种场景

myflash MySQL数据恢复工具的使用示例:误删除数据恢复和误修改数据恢复两种场景

时间:2024-09-23 12:51:32浏览次数:12  
标签:误删除 数据恢复 binlog -- age 示例 testdb user


以下是 myflash 数据恢复工具的使用示例,分为误删除数据恢复和误修改数据恢复两种情况:

  1. 误删除数据恢复:
  2. 构建测试环境:
  • 创建测试数据库和表。假设你已经安装并启动了 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);

  1. 模拟误删除操作:
  • 假设不小心删除了 age>17 的数据,执行以下删除语句:

sql

DELETE FROM user WHERE age > 17;

  1. 使用 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 回滚文件。

  1. 查看并恢复数据:
  • 使用 mysqlbinlog 查看生成的回滚文件:

mysqlbinlog -vv user.sql.flashback

可以看到文件中的内容是 insert 操作,用来恢复之前误删除的数据。

  • 直接使用 mysqlbinlog 去执行其中的内容,将数据恢复到数据库中:

mysqlbinlog user.sql.flashback | mysql -uroot -proot

最后,查看数据是否被成功恢复。

  1. 误修改数据恢复:
  2. 构建测试环境并模拟误修改操作:
  • 重复上述测试环境构建中的步骤,创建测试数据库和表,并插入测试数据。
  • 假设修改数据时忘了加 where 条件,导致所有数据的 age 字段都被误修改为 99 ,执行以下更新语句:

sql

UPDATE user SET age = 99;

  1. 使用 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

  1. 查看并恢复数据:
  • 使用 mysqlbinlog 查看生成的回滚文件。
  • 使用 mysqlbinlog 执行回滚文件中的内容,将数据恢复到数据库中。
  • 查看数据是否被成功恢复。

在使用 myflash 时,需要注意 MySQL 的 binlog 格式必须为 row ,且 binlog_row_image=full 。并且,在实际操作中,要确保指定的时间范围、 binlog 文件路径、数据库名、表名等参数的准确性,以免恢复数据失败或恢复到错误的数据。


标签:误删除,数据恢复,binlog,--,age,示例,testdb,user
From: https://blog.51cto.com/zhangxueliang/12088547

相关文章

  • MySQL binlog --skip-gtids --include-gtids --exclude-gtids 参数作用及使用示例
    在MySQL中,--skip-gtids选项用于完全跳过全局事务标识符(GTID)的处理,而--include-gtids和--exclude-gtids则是用于选择性地应用或跳过特定的GTID范围内的事务。这些选项通常在MySQL的二进制日志(binlog)消费者工具(如mysqlbinlog)中使用,而不是直接应用于MySQL服务器本身......
  • PostgreSQL向量数据类型SQL示例
    PostgreSQL支持多种数据类型,其中包括向量类型,可以用来存储和处理几何对象,如点(points)、线(lines)、线段(linesegments)、盒子(boxes)、圆(circles)、路径(paths)、多边形(polygons)等。此外,PostgreSQL还支持数组类型,可以用来存储一维或多维数组。向量数据类型示例1.几何类型PostgreSQL提供......
  • Python NumPy处理数组的基本用法代码示例
    NumPy是一个用于处理数组(向量和矩阵)以及进行数值运算的Python库。下面是一些简单的例子来展示如何使用NumP:示例1:创建数组importnumpyasnpa=np.array([1,2,3])#创建一个一维数组b=np.array([[1,2,3],[4,5,6]])#创建一个二维数组print(a)print(b)示......
  • 批量检测微信小程序封禁状态的 PHP 脚本示例
    <?php//定义需要检查的小程序AppID数组$appIds=array('appid1','appid2','appid3');//请替换为您的实际AppID//遍历小程序AppID,调用API进行状态检查foreach($appIdsas$appId){  $apiUrl='https://down.ychengsnsm.com/xcx/checkxcx.php?a......
  • 意外删除文件或丢失数据?10大免费数据恢复工具
    意外删除文件或丢失数据可能会非常令人沮丧,尤其是当这些文件很重要时。无论是珍贵的相册、重要的工作文档还是重要的软件文件,丢失数据都会感觉像一场灾难。幸运的是,有很多数据恢复工具可以帮助您恢复丢失的文件。最好的部分是什么?其中许多工具都是免费提供的!在本文中,我们将探......
  • 【TS】加深TS理解的开发实战示例代码
    TS接口开发实战:基于类类型接口设计实现日期时间应用interfaceITimeDate{curTime:Date;setTime(cur:Date):void;getTime():Date;}classCTimeimplementsITimeDate{curTime:Date;constructor(cur:Date){this.curTime=cur;......
  • appium+python自动化代码示例
    fromselenium.webdriver.common.byimportByimporttime#设置Appium连接参数caps={"platformName":"Android","platformVersion":"7.1.2",#根据夜神模拟器的Android版本进行修改"deviceName":"127.0.0.......
  • 强化学习基础:主要算法框架与Python实现示例
    创作不易,您的打赏、关注、点赞、收藏和转发是我坚持下去的动力!强化学习(ReinforcementLearning,RL)是一种通过与环境交互来学习策略的机器学习方法。RL主要包含以下几个关键组件:状态(State)、动作(Action)、奖励(Reward)、策略(Policy)和价值函数(ValueFunction)。常见的强化学习主流......
  • 小波变换及示例
    在二维Haar小波中,输入数据分解为低频和高频分量的计算公式源自Haar小波的特性,以及对输入矩阵的行和列进行逐步分解的方式。###Haar小波变换的基本思想Haar小波是最简单的小波变换,它基于二进制分解。对于二维数据(如图像),通常先对行进行一维变换,然后对列进行一维变换,得到四......
  • 在 Laravel 项目中使用 SCSS 和 TailwindCSS 代码示例
    在编码领域,人们经常意识到什么有效,什么无效,以及尽管是新事物,但什么可以带来明确的改变。在这个小教程中,我将向您展示将scsstailwindcss一起用于无数web应用程序的最简单的事情。这个强大的组合可以显着增强您的web开发工作流程并创建更易于维护的样式表。所以在开始之前先......