第78讲:截取MySQL Binlog二进制日志中特定部分内容的技巧

文章目录

    • 1.为什么要截取Binlog日志中的部分内容
    • 2.针对标识位截取Binlog日志中的部分数据
      • 2.1.以标识位号截取Binlog日志的方法
      • 2.2.截取Binlog日志中的部分数据
      • 2.3.模拟简单基于标识位的Binlog数据恢复
    • 3.针对事件范围截取Binlog日志中的部分数据

1.为什么要截取Binlog日志中的部分内容

我们通过Binlog二进制日志恢复数据时,一般都会先用备份恢复全库的数据,然后再使用Binlog恢复备份中不存在的数据,因此再使用Binlog进行数据恢复时,并不是直接恢复整个Binlog日志中的数据,只是恢复Binlog中的部分数据。

根据特定的情况以及需求去恢复Binlog日志中的数据时,需要通过截取的方式,截取特定时间段产生的Binlog日志,然后进行数据恢复,或者截取指定的开始标识位到结束标识位之间的Binlog日志。

针对截取Binlog日志中的部分数据,有两种方法:

  • 通过标识位偏移量截取
    • 通过标识位偏移量截取,主要是根据事件的Position号标识位去截取的,首先要找到要恢复的数据在Binlog的那些事件中的,然后找到这些事件的开始标识位和结束标识位,拿到这两个标识位号之后,就可以截取其中的数据。
    • 使用最为广泛。
  • 通过时间范围截取
    • 根据时间范围,例如截取早上10点到12点之间产生的Binlog日志。

2.针对标识位截取Binlog日志中的部分数据

2.1.以标识位号截取Binlog日志的方法

使用标识位Position号来截取Binlog日志中部分的数据内容时,最关键的部分就在于如何确定要截取数据的标识位号范围,也就是确定标识位的起点和终点部分,我们可以查看Binlog的事件信息,找到要恢复的数据属于哪一个事件,然后获取事件的开始标识位和结束标识位,此时也就能确定要恢复的数据在Binlog日志中的位置。

当确定好开始标识位号和结束标识位号之后,就可以通过mysqlbinlog命令去截取指定的数据内容了。

通过标识位截取部分Binlog日志的语法格式:

mysqlbinlog --start-position=开始标识位号 --stop-position=结束标识位号 Binlog日志路径

获取截取之后的Binlog日志后,可以将其写入到SQL文件里,虽然ROW格式记录的Binlog我们看不懂,但是MySQL能看得懂,我们将截取的内容输入到SQL文件之后,就可以使用source命令对这个截取后的Binlog日志在数据库中进行数据恢复。

2.2.截取Binlog日志中的部分数据

在Binlog中有一条是关于创建db_2数据库的,我们将这个数据从Binlog日志中截取出来。

1)首先获取创建数据库的语句位于哪个事件中

查看Binlog日志中的Event事件信息,创建数据库属于DDL语句,因此可以直接看到具体的SQL在哪个事件中。

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

2)获取要截取的数据标识位范围

如下图所示,我们已经知道创建db_2数据库的操作在哪个事件中了,想要截取这一部分的Binlog日志,就需要确定这个事件的标识位号,开始标识位号是219,结束标识位号是313。

如果不知道该怎么确定开始标识位和结束标识位,那么就去看一下要截取的内容是那个事件产生的,在事件信息中就包含了这个事件的开始标识位和结束标识位,内容是由这个事件产生的,那么通过这个事件的开始标识位和结束标识位就能拿到想要的数据。

image-20220701110217115

开始标识位号是上一个事件的结束标识位号,如果我们要截取多个事件产生的Binlog时,只需要记录第一个事件的开始标识位号,和最后一个事件的结束标识位号即可,如上图的开始标识位313和结束标识位729,在这个标识位范围内就存在了多个事件信息。

3)截取出创建db_2数据库的Binlog日志

目前我们已经拿到要截取的数据的开始标识位以及结束标识位号了,下面就可以通过mysqlbinlog目录来截取这两个标识位范围内产生的Binlog日志,然后将截取的内容输出到SQL文件里。

[root@mysql backup]# mysqlbinlog --start-position=219 --stop-position=313 /data/mysql/mysql-bin.000002 > mysql-binlog-20220701.sql

如下图所示,截取的内容中只包含了创建db_2数据库的Binlog日志,Binlog截取的没问题,SET语句不用管。

image-20220701113200910

2.3.模拟简单基于标识位的Binlog数据恢复

我们在前面根据需求,截取除了创建db_2数据库的Binlog日志,下面我们将db_2数据库删除,然后通过Binlog进行简单的数据恢复。

1.模拟误删除
mysql> drop database db_2;

2.1新开启一个MySQL会话禁止记录binlog(退出会话后配置失效)
#禁止将后续的操作记录到binlog中
mysql> set sql_log_bin=0;

2.从Binlog日志中进行数据恢复
mysql> source /root/backup/mysql-binlog-20220701.sql

在使用Binlog数据恢复前,需要先将要恢复的数据从Binlog日志中截取出来,然后输出到一个SQL文件里,最后使用source命令通过这个SQL文件还原误删除的数据。在数据还原之前可以先禁止将操作记录到binlog中,因为还原的数据本来就是从Binlog中截取的,没有必要再往Binlog中写一份,减少磁盘的占用。这里使用source进行还原而不是使用mysql进行还原,是因为source还原的性能要高,能减少IO的开销。

我们刚刚五删除了db_2数据库,然后通过Binlog将数据库还原成功。

image-20220701114856672

3.针对事件范围截取Binlog日志中的部分数据

使用时间范围截取的Binlog不如标识位截取的精准,因此在企业中应用的较少。

使用时间范围截取的Binlog语法格式:

mysqlbinlog --start-datetime="开始时间" --stop-datetime="结束时间" /data/mysql/mysql-bin.000002

时间格式要以"年-月-日 时:分:秒"的格式来定义

以时间范围截取Binlog的原理其实和Binlog中的注释信息有关,在每个注释里面都有一个时间,mysqlbinlog是根据这个时间来截取的。

案例:截取22:30到23:00之间产生的Binlog日志。

[root@mysql backup]# mysqlbinlog --start-datetime="2022-06-30 22:30:00" --stop-datetime="2022-06-30 23:00:00" /data/mysql/mysql-bin.000002

顺便提一个小的知识点:无论如何截取,标识位4-154之间的Binlog都会被查询出来。

image-20220701132235516

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Sublime Text 3配置C/C++开发环境

Sublime Text 3配置C/C开发环境 一、引言二、主要内容1. 初识 Sublime Text 32. 接入 mingw-w642.1 下载 mingw-w642.2 环境变量配置 3. 配置 C/C 开发环境3.1 C Build System 配置3.2 C Build System 配置 4. 编写 C/C 代码4.1 第一个 C 代码【helloworld.c】4.2 第一个 C 代码…

jmeter,跨线程调用cookie

结构目录 一、线程组1 1、创建登录的【HTTP请求】,并配置接口所需参数; 2、创建【正则表达式提取器】,用正则表达式提取cookie字段; 3、创建【调试取样器】,便于观察第2步提取出的数据; 4、创建【BeanSh…

构建外卖小程序:技术代码实践

在这个数字化的时代,外卖小程序已经成为餐饮业的一项重要工具。在本文中,我们将通过一些简单而实用的技术代码,向您展示如何构建一个基本的外卖小程序。我们将使用微信小程序平台作为例子,但这些原理同样适用于其他小程序平台。 …

钉钉机器人发送表格

背景: 由于每次发送excel连接,不太好看,想着简单的表格直接用消息的方式发送在群里,就想着弄一个直接发送的表格信息,但是钉钉官网是没有的。 我估计钉钉的开发人员也没有想过,会有人钻空子,用markdown发送…

从YOLOv1到YOLOv8的YOLO系列最新综述【2023年4月】

作者:Juan R. Terven 、Diana M. Cordova-Esparaza 摘要:YOLO已经成为机器人、无人驾驶汽车和视频监控应用的核心实时物体检测系统。我们对YOLO的演变进行了全面的分析,研究了从最初的YOLO到YOLOv8每次迭代的创新和贡献。我们首先描述了标准…

Mac清理软件cleanmymac x4.14.4破解版,2024年有免费cleanmymac x激活码

​ CleanMyMac X 4.14.4破解版可以快速识别并删除占用磁盘空间的无用文件,提升我们系统的存储空间。它还可以优化启动项、修复系统错误和保护隐私等。总之CleanMyMac X十分强大有需要的赶快下载吧, CleanMyMac X 许可证激活码:ak39840506641bjckr 需要…

Educoder/头歌JAVA——jQuery基础

目录 第1关:jQuery入门 相关知识 环境安装 第一个程序 id选择器 第2关:jQuery基本选择器 相关知识 类选择器 元素选择器 编程要求 第3关:过滤选择器 (一) 相关知识 设置css属性 编程要求 第4关&#xff1…

LLM之RAG实战(四):Self-RAG如何革命工业LLM

论文地址:https://arxiv.org/pdf/2310.11511.pdf Github地址:https://github.com/AkariAsai/self-rag 尽管LLM(大型语言模型)的模型和数据规模不断增加,但它们仍然面临事实错误的问题。现有的Retrieval-Augmented Gen…

Linux本地docker一键部署traefik+cpolar实现远程访问dashboard界面

文章目录 前言1. Docker 部署 Trfɪk2. 本地访问traefik测试3. Linux 安装cpolar4. 配置Traefik公网访问地址5. 公网远程访问Traefik6. 固定Traefik公网地址 前言 Trfɪk 是一个云原生的新型的 HTTP 反向代理、负载均衡软件,能轻易的部署微服务。它支持多种后端 (D…

pycharm中如何去除波浪线的设置

pycharm中,碰到恼人的红绿波浪线,打开’file-settings’,然后,参照如图设置,去除’effects’选项:

SQL注入靶场—sqli-labs安装

第一步:从下面的网址下载sqli-labs软件包 ①、、下载安装phpstudy(直接解压安装即可) 链接:https://pan.baidu.com/s/1X8G_qXnTXQh_S3NAF2ux_A 提取码:2693 --来自百度网盘超级会员V4的分享 ①、下载sqli-labs压缩…

看看CHAT是怎么写MPP开发和调度策略

CHAT回复:MPP(Massively Parallel Processing)开发和调度策略是一种并行处理技术,主要用于大规模数据仓库和数据竞赛应用。 1. 数据分布:这是MPP系统的主要特点,也是其能够提高性能和吞吐量的主要原因。通常…

CSS

注释标签的快捷键:Ctrl/ 1,选择器写法 类选择器:重要重要重要 id选择器:样式#定义,结构id调用,只能调用一次 。div就是一个盒子,用来装网页内容的 通配符选择器:不需要调用&#x…

【华为数据之道学习笔记】5-2华为数据湖的特点

华为数据湖是逻辑上对内外部的结构化、非结构化的原始数据的逻辑汇聚。数据入湖要遵从6项入湖标准,基于6项标准保证入湖的质量,同时面向不同的消费场景提供两种入湖方式,满足数据消费的要求。经过近两年的数据湖建设,目前已经完成…

芒果RT-DETR改进实验:深度集成版目标检测 RT-DETR 热力图来了!支持自定义数据集训练出来的模型

💡该教程为改进RT-DETR指南,属于《芒果书》📚系列,包含大量的原创改进方式🚀 💡🚀🚀🚀内含改进源代码 按步骤操作运行改进后的代码即可💡更方便的统计更多实验数据,方便写作 芒果RT-DETR改进实验:深度集成版目标检测 RT-DETR 热力图来了!支持自定义数据集…

c++ qt 窗口开发中 俩按钮组合 配合 显影 已解决

在日常项目中,有这么需求,还想窗口移动,还想 右侧关闭 还能tab栏点击显影的需求,不得使用 qt模拟点击事件 进行功能优化 特大杯 大杯 控制 窗口显影, 咖啡 按钮 显示窗口 可乐 豆浆 不显示窗口 四个按钮的 互斥关…

go学习之网络编程

文章目录 网络编程1、网络编程的基本介绍2.网络编程的基础知识1)协议(tcp/ip)2)OSI与TCP/ip参考模型3)ip地址4)端口(port)介绍5)tcp socket编程的客户端和服务器端 3.socket编程快速入门4.经典项目-海量用户即时通讯系…

DevEco Studio 项目鸿蒙(HarmonyOS)资源引用(自定统和系统)

DevEco Studio 项目鸿蒙(HarmonyOS)资源引用(自定统和系统) 一、操作环境 操作系统: Windows 10 专业版 IDE:DevEco Studio 3.1 SDK:HarmonyOS 3.1 二、资源访问 HarmonyOS应用资源分为两类,一类是应用资源&…

kafka学习笔记--Kafka副本

本文内容来自尚硅谷B站公开教学视频,仅做个人总结、学习、复习使用,任何对此文章的引用,应当说明源出处为尚硅谷,不得用于商业用途。 如有侵权、联系速删 视频教程链接:【尚硅谷】Kafka3.x教程(从入门到调优…

go基础学习

用变量,之前需,先定义,该变量 一个go语言接口的模型:https://gitee.com/goku_black/go-gin-struct-test/blob/master/main.go 1、a和a区别? a是先进行取值,后进行自增。a是先进行自增,后进行取…