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

news2024/11/25 3:00:13

文章目录

    • 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

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

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

相关文章

虚幻学习笔记15—C++和UI(一)

一、前言 在C可以直接创建按钮、滚轮等UI,并且可以直接绑定并处理响应事件。在创建C代码后还是需要通过蓝图来显示到应用中,总体来说还是不如直接用蓝图来的方便。 本文使用的虚幻引擎为5.2.1。 二、实现 2.1、创建UUserWidgetl类型的C类 声明两个按钮…

老杨说运维 | 年末大盘点!擎创CEO实时盘点运维大干货,不容错过

2023年即将走到尾声,对于擎创而言,这一年是颇具成长和成就的一年。我们庆幸获得了更多客户的信任,也为他们达到下一个运维阶段提供了充足的助力。 越多的实践就会带来越多新的理解和可优化的经验。这一年来,擎创在运维数据治理、智…

【PID学习笔记10】PID公式分析

写在前面 前面已经将控制系统的基础知识点过了一遍,从本节开始,将正式学习PID控制的相关知识,将会从基本的PID公式概念解释,再基于matlab仿真介绍十几种数字式PID的基本概念。本文重点讲解PID的经典公式。 一、连续与离散的概念…

Tableau进阶--Tableau数据故事慧(20)解构Tableau的绘图逻辑

官网介绍 官网连接如下: https://www.tableau.com/zh-cn tableau的产品包括如下: 参考:https://zhuanlan.zhihu.com/p/341882097 Tableau是功能强大、灵活且安全些很高的端到端的数据分析平台,它提供了从数据准备、连接、分析、协作到查阅…

【MATLAB】数据拟合第10期-二阶多项式的局部加权回归拟合算法

有意向获取代码,请转文末观看代码获取方式~也可转原文链接获取~ 1 基本定义 二阶多项式局部加权回归拟合算法是一种用于回归分析的方法,主要通过局部加权线性回归模型来实现。以下是对二阶多项式局部加权回归拟合算法的介绍: 局部加权线性回…

C# OpenCvSharp DNN 部署YOLOV6目标检测

目录 效果 模型信息 项目 代码 下载 C# OpenCvSharp DNN 部署YOLOV6目标检测 效果 模型信息 Inputs ------------------------- name:image_arrays tensor:Float[1, 3, 640, 640] -------------------------------------------------------------…

搭建个人智能家居 开篇(搭建Home Assistant)

搭建个人智能家居 开篇(搭建Home Assistant) 前言Home Assistant搭建Home AssistantUbuntu系统搭建Windows系统搭建VM安装方法VirtualBox安装方法: 配置Home Assistant控制页面 前言 随着科技的进步、发展,物联网给我们的生活带来…

Axure的安装及界面基本功能介绍

目录 一. Axure概述 二. Axure安装 2.1 安装包下载 2.2 安装步骤 三. Axure功能介绍​ 3.1 工具栏介绍 3.1.1 复制,剪切及粘贴 3.1.2 选择模式和连接 3.1.3 插入形状 3.1.4 点(编辑控点) 3.1.5 置顶和置底 3.1.6 组合和取消组合 …

双向无线功率传输系统MATLAB仿真

微❤关注“电气仔推送”获得资料(专享优惠) 模型简介: 初级侧转换器通过双向 AC/DC 转换器从电网获取电力,并由直流线电压 Vin 供电,而拾波侧被视为连接到 EV,并由连接到任一存储的单独直流源 Vout 表示或…

express 下搞一个 websocket 长连接

安装模块 npm i express npm i express-ws 新建文件app.js 先安排源码 监听端口 7777 var express require(express) var app express() require(express-ws)(app)var port 7777 var clientObject {} app.ws(/, (client, req) > {// 连接var key req.socket.re…

TypeScript【枚举、联合类型函数_基础、函数_参数说明 、类的概念、类的创建】(二)-全面详解(学习总结---从入门到深化)

文章目录 枚举 联合类型 函数_基础 函数_参数说明 类的概念 类的创建 枚举 枚举(Enum)类型用于取值被限定在一定范围内的场景,比如一周只能有七天,颜色限定为红绿蓝等 枚举例子 枚举使用 enum 关键字来定义 enum Days {…

locust 压测 websocket

* 安装 python 3.8 https://www.python.org/ py --version * 安装 locust pip install locust2.5.1 -i http://pypi.douban.com/simple/ pip install locust2.5.1 -i https://pypi.mirrors.ustc.edu.cn/simple/ locust -V 备注:-i 是切换下载源 * 安装依赖 pip ins…

一篇文章讲透TCP/IP协议

1 OSI 7层参考模型 2 实操连接百度 nc连接百度2次,使用命令netstat -natp查看就会重新连接一次百度 请求百度 3 三次握手、socket 应用层协议控制长连接和短连接 应用层协议->传输控制层(TCP UDP)->TCP( 面向连接&am…

超声波清洗机应该怎样使用?清洁能力强超声波清洗机推荐

其实超声波清洗机使用方法非常简单,只需要将清洁物品放进超声波清洗机内,加入水打开开关即可开始使用,不需要太复杂操作就可以开启清洗,等待个数分钟就可以得到一个干干净净的物品被清洗完毕!可见现在科技进步&#xf…

在Node.js中MongoDB更新数据的方法

本文主要介绍在Node.js中MongoDB更新数据的方法。 目录 Node.js中MongoDB更新数据使用原生 MongoDB 驱动程序更新数据使用 Mongoose 更新数据 Node.js中MongoDB更新数据 在Node.js中,可以使用原生的 MongoDB 驱动程序或者使用 Mongoose 来更新 MongoDB 数据。 下面…

Redis设计与实现之字典

目录 一、字典 1、 字典的应用 实现数据库键空间 用作Hash类型键的其中一种底层实现 2、字典的实现 哈希表实现 哈希算法 3、创建新字典 4、添加键值对到字典 5、添加新元素到空白字典 6、添加新键值对时发生碰撞处理 7、添加新键值对时触发了 rehash操作 Note:什么…

SpringIOC之FilterType

博主介绍:✌全网粉丝5W,全栈开发工程师,从事多年软件开发,在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战,博主也曾写过优秀论文,查重率极低,在这方面有丰富的经验…

MySQL事务与MVCC详解

前置概念之事务 在开始MVCC的讨论之前,我们必须了解一些关于事务的概念。 什么是事务 现在我们开发的一个功能需要进行操作多张表,假如我们遇到以下几种情况: 某个逻辑报错数据库连接中断某台服务器突然宕机… 这时候我们数据库执行的操作可能才到一…

从零开始搭建企业管理系统(七):RBAC 之用户管理

RBAC 之用户管理 创建表(Entity)用户表角色表权限表用户角色表关系注解ManyToMany 角色权限表 接口开发UserControllerUserServiceUserServiceImplUserRepository 问题解决update 更新问题懒加载问题JSON 循环依赖问题 根据上一小结对表的设计&#xff0…

2020年AMC8数学竞赛真题的典型考点和详细解析

从战争中学习战争。 对于2024年1月19日的AMC8竞赛,如何备考和冲刺取得更好的成绩?六分成长建议通过反复刷真题,来掌握AMC8的出题方式、考点和解题思路,并且对自己前期的学习查漏补缺,这是最快的方式。 如何提高刷真题…