mysql使用flashback恢复数据

news2025/1/31 3:05:20

常在河边走,哪有不湿鞋。如果我们经常操作数据库,很有可能就会造成误操作,假如我们不幸误删了数据,有没有办法快速恢复呢?
这里,我们就以用的最多的mysql举例,聊聊如何快速恢复数据。mysql官方貌似并没有提供什么快速恢复数据的工具,业界倒是有很多和myql相关的快速恢复的工具,比如:binlog2sql,或者myflash。但是我看了看,都需要搞一些安装包,并且我发现有些工具已经不维护了,不清楚有没有啥问题,所以我的诉求是:
1)、工具要权威,并且持续迭代
2)、不要装一些和恢复数据没关系的包
基于以上想法,我找到了一篇国外老哥写的文章,原文链接,能看懂英文的,尽量看英文,原文写的很清晰。
我们这篇文章除了翻译一下国外老哥的文章外,还对其内容进行了补充,原文只是介绍了恢复工具的使用,略过了一些细节,对于一些刚入门的同学来说,需要了解一些前置知识的,所以就有了这篇文章。文章中,我从如何获取恢复工具,恢复前的准备工作,以及如何使用恢复工具进行恢复,进行了详细的解释,方便刚开始用mysql的同学学习。
下面我们开始进入正题
我们此次的mysql恢复数据操作要依赖mariadb的恢复工具mysqlbinlog,mariadb的mysqlbinlog有一个很炫的功能,flashback,官方介绍,flashback就是我们今天的主角,快速恢复数据就靠它了(据说flashback是阿里云的彭立勋开发的,然后贡献给了mariadb),目前flashback只支持DML操作,还不支持DDL。

1、准备工作

我本地用的是mac,装docker来测试的。
1)、获取mariadb的mysqlbinlog文件,拷贝到mysql对应目录下
首先,docker安装mysql 5.7.30。然后再用docker安装mariadb 10.2.40,从mariadb 10.2.40安装目录中的/usr/bin目录下将mysqlbinlog复制到本地,可以使用以下命令

docker cp a2c08aacaa83115877f:/usr/bin/mysqlbinlog /Users/test/mariadb/usr/bin/mysqlbinlog

然后再次利用docker cp命令将该mysqlbinlog拷贝到mysql 5.7.30安装目录的/usr/bin下,替换mysql的mysqlbinlog。
2)、测试数据
建立一个名为user_like的库,然后建立一张表t,并插入一条数据

CREATE TABLE `t`  (
  `id` int(11) UNSIGNED NOT NULL,
  `c` int(11) UNSIGNED NULL DEFAULT NULL,
  `d` int(11) UNSIGNED NULL DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE,
  INDEX `c`(`c`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = DYNAMIC;

INSERT INTO `user_like`.`t` (`id`, `c`, `d`) VALUES (5, 5, 5);

2、开启binlog

数据恢复工作,基本都是基于binlog来做的,所以需要开启binlog

接下来
1、首先确保你开启了binlog日志

show variables like 'log_%';

如果未开启,需要在my.cnf中配置一下,比如:

log-bin = mysql-bin
server-id=171562767
binlog_format=row

3、关闭gtid的三个变量

如果我们的mysql是一个集群的话,恢复工作通常是在一台从机上。我们需要先关闭从机

//1、将这台机器从主从集群上摘下来
STOP SLAVE;

//2、关闭gtid模式
SET GLOBAL gtid_mode = ON_PERMISSIVE;
SET GLOBAL enforce_gtid_consistency = OFF;

//3、设置从机可写
SET GLOBAL read_only = OFF;

4、模拟数据误删除

删除一条数据

delete from t where id = 5;

5、通过mysqlbinlog查看误删除的语句

1)、查看目前mysql中有哪些binlog日志

SHOW BINARY LOGS

在这里插入图片描述
2)、查看binlog中的事件信息

show binlog events in 'mysql-bin.000013';

在这里插入图片描述
红框中的内容就是和我们这次delete语句相关的事件信息。从红框中可以看到我们此次删除操作涉及的表是:user_like.t,Delete_rows表明我们这是一条delete语句
3)、定位需要恢复的位点
事件表格中的第二列是事件的位点信息,可以看到位点是从154到395。
4)、通过位点查看删除的sql
我们利用mysqlbinlog看一下154到395都有哪些信息。

-vv 表明把所有信息都解析出来,-vv后面是binlog文件的位置,后面就是binlog的位点信息
mysqlbinlog  -vv /var/lib/mysql/mysql-bin.000013 --start-position=154 --stop-position=395

在这里插入图片描述
通过mysqlbinlog的返回信息可以看到,我们执行了一条DELETE语句,删除了id=5的一行。
但是这里有一个问题,生产上,我们误执行了一条语句后,同时会有很多的其他语句也在执行,我们会看到很多的事件信息,此时不可能通过人工去筛选出来我们执行的误操作语句,我们只能知道,大概5分钟以前或者10分钟以前,误执行了一条语句。那这个时候,我们可以指定时间,比如下面的语句:

//查看过去半小时的binlog信息
mysqlbinlog -vv --start-datetime="$(date '+%F %T' -d 'now - 30 minutes')" --database=user_like --table=t /var/lib/mysql/mysql-bin.000013

6、通过mysqlbinlog查看闪回数据

通过mysqlbinlog,我们能够看到我们应该执行的恢复语句。如下:

//在末尾添加了--flashback参数,这个参数是闪回的关键
mysqlbinlog -vv --start-datetime="$(date '+%F %T' -d 'now - 30 minutes')" --database=user_like --table=t /var/lib/mysql/mysql-bin.000013 --flashback

在这里插入图片描述
如果是update语句,闪回会将set和where中的数据颠倒,输出一条update语句,比如:我们的一张表中有两个字段(f1,f2),其中有一行数据(2,2),假设我们误执行了
UPDATE a SET f2 = 10000 WHERE f1 = 2,然后再使用上面的闪回语功能查看闪回语句,就可以看到闪回语句是:
在这里插入图片描述
可以看到上述语句就是将我们的条件和更新数翻转了一下再执行

7、将闪回数据导出成binlog

mysqlbinlog --start-datetime="$(date '+%F %T' -d 'now - 2 hour')" --database=user_like --table=t /var/lib/mysql/mysql-bin.000013 --flashback > /usr/flashback.binlog

8、通过闪回的binlog恢复被误操作的数据

mysql -uroot -p111111 --init-command='SET sql_log_bin=0' user_like < /usr/local/flashback.binlog

我们需要另外弄一个mysql的实例,然后再创建一个user_like库,一张表 t,然后再执行上面的恢复操作,执行完后,检查无问题,可以导出执行sql到主库上执行。

9、如何按表恢复

在用备份恢复出临时实例之后,将这个临时实例设置成线上备库的从库,这样:在 start slave 之前,先通过执行change replication filter replicate_do_table = (tbl_name) 命令,就可以让临时库只同步误操作的表;这样做也可以用上并行复制技术,来加速整个数据恢复过程。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/924124.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

海外网红力量:加速裂变营销,征服新市场

随着全球互联网的飞速发展&#xff0c;海外市场已经成为越来越多企业追逐的商机之地。在这个多元文化的时代&#xff0c;海外网红已经成为推动营销和品牌传播的强大力量。利用海外网红进行裂变营销已经成为许多企业成功进军海外市场的一项重要策略。本文Nox聚星将和大家探讨如何…

element-ui中的el-table合并单元格

描述&#xff1a; 在写项目的时候有时候会经常遇到把行和列合并起来的情况&#xff0c;因为有些数据是重复渲染的&#xff0c;不合并行列会使表格看起来非常的混乱&#xff0c;如下&#xff1a; 而我们想要的数据是下面这种情况&#xff0c;将重复的行进行合并&#xff0c;使表…

13.4 目标检测锚框标注 非极大值抑制

锚框的形状计算公式 假设原图的高为H,宽为W 锚框形状详细公式推导 以每个像素为中心生成不同形状的锚框 # s是缩放比&#xff0c;ratio是宽高比 def multibox_prior(data, sizes, ratios):"""生成以每个像素为中心具有不同形状的锚框"""in_he…

mysql 默认的4个数据库 介绍

mysql 存储MySQL的用户账号和权限信息&#xff0c;一些存储过程、事件的定义信息 一些运行过程中产生的日志信息&#xff0c;一些帮助信息以及时区信息等 information_schema 存储Mysql服务器 维护的所有其它数据库的信息&#xff0c;比如有哪些表、哪些视图、哪些触发器、哪…

C++设计模式(工厂方法模式)

文章目录 前言一、工厂方法模式介绍二、工厂方法模式和简单工厂模式对比三、工厂方法模式适用场景四、工厂方法模式示例代码总结 前言 本篇文章来带大家学习C中的工厂方法模式。 一、工厂方法模式介绍 工厂方法模式是一种创建型设计模式&#xff0c;用于通过工厂方法创建对象…

jdk新特性 02 .接口增强和函数式接口,方法引用

1.JDK8中接口的新增 在JDK8中针对接口有做增强&#xff0c;在JDK8之前 interface 接口名{ 静态常量; 抽象方法; }JDK8之后对接口做了增加&#xff0c;接口中可以有默认方法和静态方法 interface 接口名{ 静态常量; 抽象方法; 默认方法; 静态方法; }2.默认方法 2.1 为什么要增…

OS 内核级线程

用户级线程是两个栈&#xff0c;核心级线程是两套栈&#xff0c;用户栈和内核栈 用户级是并发&#xff08;同时触发、交替执行&#xff09;&#xff0c;这个是并行&#xff08;同时触发可以同时执行&#xff09; 进入内核的唯一方式是中断 根据TCB的切换&#xff0c;实现内核…

【经验贴】新手项目经理如何接手并管好项目?

最近有刷到这样一些求助帖&#xff1a;初入职场两三年的项目经理现在开始独立带项目&#xff0c;由于缺乏经验不知道从何下手&#xff0c;询问如何能快速接手并管好项目呢&#xff1f;这个话题也引起了大家的热议&#xff0c;今天就给大家分享一下一些实践经验。 1.刚拿到项目时…

如何做好项目进度管理?来看这几个要点!

8个项目管理工具模板、60个项目管理甘特图标模板、赠送30本项目管理电子书https://download.csdn.net/download/XMWS_IT/19886618?spm1001.2014.3001.5503 项目进度管理是指在项目实施过程中&#xff0c;对各阶段的进展程度和项目最终完成的期限所进行的管理。其目的是保证项目…

clickhouse-压测

一、数据集准备 数据集可以使用官网数据集&#xff0c;也可以用ssb-dbgen来准备 1.准备数据 这里最后生成表的数据行数为60亿行&#xff0c;数据量为300G左右 git clone https://github.com/vadimtk/ssb-dbgen.git cd ssb-dbgen/ make1.1 生成数据 # -s 指生成多少G的数据…

Linux C 多进程编程(面试考点)

嵌入式开发为什么要移植操作系统&#xff1f; 1.减小软硬件的耦合度&#xff0c;提高软件的移植性 2. 操作系统提供很多库和工具&#xff08;QT Open CV&#xff09;&#xff0c;提高开发效率 3.操作系统提供多任务机制&#xff0c;______________________? (提高C…

Zenity 简介

什么使 Zenity Zenity 是一个开源的命令行工具&#xff0c;它提供了一种简单的方式来创建图形化的用户界面&#xff08;GUI&#xff09;对话框&#xff0c;以与用户进行交互。它基于 GTK 库&#xff0c;可以在 Linux 和其他 UNIX-like 系统上使用。 Zenity 可以通过命令行或脚…

最新政策丨政务服务电子文件归档和电子档案管理办法说了什么?

随着数字化时代的持续演进&#xff0c;我国政府部门正积极推动数字政府建设&#xff0c;以优化政务服务&#xff0c;提升办事效率。为了适应这一背景&#xff0c;国务院发布了《政务服务电子文件归档和电子档案管理办法》&#xff0c;旨在规范电子档案管理&#xff0c;加强政务…

为什么使用消息队列?消息队列能够做什么?消息队列有哪些?怎么选择?

❤ 作者主页&#xff1a;李奕赫揍小邰的博客 ❀ 个人介绍&#xff1a;大家好&#xff0c;我是李奕赫&#xff01;(&#xffe3;▽&#xffe3;)~* &#x1f34a; 记得点赞、收藏、评论⭐️⭐️⭐️ &#x1f4e3; 认真学习!!!&#x1f389;&#x1f389; 文章目录 为什么使用消…

msvcp110.dll下载安装方法分享,教你怎么快速的修复msvcp110.dll文件

当你的电脑出现msvcp110.dll文件缺失时&#xff0c;这时候不要慌张&#xff0c;其实要解决这个问题很简单&#xff0c;我们只要重新下载安装msvcp110.dll文件就可以了&#xff0c;今天主要是来给大家讲解一下这方面的信息&#xff0c;教大家如何下载安装msvcp110.dll。 一.了解…

MPDIoU:有效和准确的边界框回归的损失

文章目录 摘要1、简介2、相关工作2.1、目标检测和实例分割2.2. 场景文本识别2.3、边界框回归的损失函数 3、点距最小的并集交点4、实验结果4.1、 实验设置4.2、数据集4.3、 评估协议4.4、 目标检测的实验结果4.5、 字符级场景文本识别的实验结果4.6、 实例分割的实验结果 5、 结…

Anomalib:异常检测的深度学习库 -- 应用Anomalib训练自己的图片

文章目录 资料汇总 Github链接&#xff1a;https://github.com/openvinotoolkit/anomalib/blob/main/README.md 论文链接&#xff1a;https://arxiv.org/pdf/2202.08341v1.pdf 其他参考资料&#xff1a;https://paperswithcode.com/paper/efficientad-accurate-visual-anomaly-…

突破限制,创造佳绩!国内工作流厂商助您腾飞!

随着业务量的激增&#xff0c;很多企业单位都想在办公领域更上一层楼&#xff0c;实现飞跃式地腾飞。采用什么样的软件设备能助力企业降本增质&#xff1f;国内工作流厂商流辰信息作为研发低代码技术平台的服务商&#xff0c;一直深知行业形式和发展动态&#xff0c;将全力以赴…

前端开发工具: VSCode

VSCode 安装使用教程&#xff08;图文版&#xff09; | arry老师的博客-艾编程 1. 下载 在官方网站&#xff1a;https://code.visualstudio.com/ 下载最新版本的 VSCode 即可 2. VSCode 常见插件安装 所有插件安装后,需要重启一下才生效 2.1 简体中文语言包 2.2 编辑器主…

四信重磅推出5G RedCap AIoT摄像机 RedCap轻量级5G终端新品首发!

6月6日&#xff0c;四信受邀出席移动物联网高质量发展论坛&#xff0c;并在移动物联网新产品发布环节隆重推出5G RedCap AIoT摄像机&#xff0c;再次抓紧需求先机&#xff0c;为行业用户创造无限可能&#xff01; 两大应用场景 助推RedCap走深向实 火遍全网络的RedCap应用场景可…