MySQL运维实战之备份和恢复(8.6)将数据库恢复到指定时间点

作者:俊达

恢复到指定时间点

使用全量备份和增量备份文件,都只能将数据库恢复到备份结束的时间。通过binlog,可以将数据库恢复到任意时间点(前提是备份和该时间点之间的binlog都存在)。

找到时间点对应的binlog

恢复到时间点,首先需要定位该时间点对应的binlog位点(binlog文件和文件内的偏移量)。每个binlog头部都记录了该binlog产生的时间,我们可以使用mysqlbinlog工具解析binlog,查看binlog的第一个event的时间:

# mysqlbinlog -v binlog.000021 | head
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=1*/;
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
DELIMITER /*!*/;
# at 4
#230625 16:44:06 server id 23480  end_log_pos 126 CRC32 0x245d7ed7 	Start: binlog v 4, server v 8.0.32 created 230625 16:44:06

如果我们需要恢复到某个时间点T,那么我们需要找的binlog开始时间不大于T,并且该binlog的下一个binlog的开始时间大于T。

这里提供一个python的脚本,可以批量查看binlog时间:

import sys
import structif len(sys.argv) >= 2:pattern = sys.argv[1]
else:pattern = 'mysql-bin.[0-9]*'print ('binlog pattern: %s' % pattern)def parse_binlog_header(filename):with open(filename, 'rb') as f:data = f.read(8)return struct.unpack('i', data[4:])[0]def main():import globfrom datetime import datetimefor f in sorted(glob.glob(pattern), key=lambda x: int(x.split('.')[-1])):ts = parse_binlog_header(f)print f, ts, datetime.fromtimestamp(ts)if __name__ == '__main__':main()

使用脚本,传入binlog匹配模式,显示binlog时间:

# python parse_binlog_time.py  'binlog/binlog.[0-9]*'
binlog pattern: binlog/binlog.[0-9]*
binlog/binlog.000001 1686640790 2023-06-13 15:19:50
binlog/binlog.000002 1686647377 2023-06-13 17:09:37
binlog/binlog.000003 1686647391 2023-06-13 17:09:51
......
binlog/binlog.000020 1687682137 2023-06-25 16:35:37
binlog/binlog.000021 1687682646 2023-06-25 16:44:06
binlog/binlog.000022 1687683127 2023-06-25 16:52:07

我们的全量备份binlog位点是binlog.000020:

# cat xtrabackup_binlog_info
binlog.000020	610	58224b02-09b7-11ee-90bd-fab81f64ee00:1-13191,7caa9a48-b325-11ed-8541-fab81f64ee00:1-27

假设我们希望将数据库恢复到2023-06-25 16:45:00,那么根据各个binlog的时间信息,我们需要恢复到binlog.000021,从该binlog中找到16:45:00对应的位点:

# mysqlbinlog --stop-datetime="2023-06-25 16:45:01" binlog/binlog.000021 | grep -A 1 "^# at" | tail -2# at 340009
#230625 16:45:00 server id 23480  end_log_pos 340040 CRC32 0xa1841663 	Xid = 88279

我们需要应用binlog.000021偏移量340040之前的binlog。

使用mysqlbinlog解析binlog并执行

从前面的步骤,我们得到了需要执行的binlog:
binlog开始位点:binlog.000020,偏移量610。
binlog结束位点:binlog.000021,偏移量340040。

依次使用mysqlbinlog解析binlog,并发送给mysql执行。执行第一个binlog时指定参数start-position,执行最后一个binlog时,指定参数stop-position。

执行第一个binlog:

mysqlbinlog --start-position=610 binlog.000020 | mysql -uroot -h127.0.0.1 -P6380 -uroot -pabc123

执行中间的binlog(本测试案例中只有2个binlog)。不需要带start-position和stop-position参数。

执行最后一个binlog:

mysqlbinlog --stop-position=340040 binlog.000021 | mysql -uroot -h127.0.0.1 -P6380 -uroot -pabc123

binlog执行完成后,校验一下数据。

下一篇我们将介绍另一种将数据库恢复到指定时间点的方法。

更多技术信息请查看云掣官网https://yunche.pro/?t=yrgw

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

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

相关文章

vSphere 8考试认证题库 2024最新(VCP 8.0版本)

VMware VCP-DCV(2V0-21.23)认证考试题库,已全部更新,答案已经完成校对,完整题库请扫描上方二维码访问。正常考可以考到450分以上(满分500分,300分通过) An administrator is tasked …

echarts 模拟时间轴播放效果

使用echarts柱状图模拟时间轴播放控制。开始/暂停/快进/慢进/点选 代码可直接放echart官方示例执行 let start new Date(2024-01-01); let end new Date(2024-01-10); let diff end - start; let dotLen 200;let data [start, end]; option {color: [#3398DB],tooltip: …

论文解读:Rectifying the Shortcut Learning of Background for Few-Shot Learning

文章汇总 问题&动机&解决方法 图像背景是一种有害知识的来源,这是少数镜头学习模型容易吸收的(问题) 通过在训练和评估中提取图像中的前景目标而不需要任何额外的监督来解决这个问题(动机) 在训练和评估时将模型的注意力吸引到图像前景上(方法) 摘要 …

Maven模块化最佳实践

一,模块化的原因及意义 模块化是一种将大型的软件系统拆分成相互独立的模块的方法。具有以下优势: 代码复用:不同的模块可以共享相同的代码。这样可以避免重复编写相同的代码,提高开发效率。 模块独立性:每个模块都可…

2023年第三届中国高校大数据挑战赛(第二场)A题思路

竞赛时间 (1)报名时间:即日起至2024年3月8日 (2)比赛时间:2024年3月9日8:00至2024年3月12日20:00 (3)成绩公布:2024年4月30日前 赛题方向:大数据统计分析 …

Day25:安全开发-PHP应用文件管理模块包含上传遍历写入删除下载安全

目录 PHP文件操作安全 文件包含 文件删除 文件编辑 文件下载 云产品OSS存储对象去存储文件(泄漏安全) 思维导图 PHP知识点 功能:新闻列表,会员中心,资源下载,留言版,后台模块,模版引用,框…

关于出国留学和考研比较----以本人双非跨考计算机为例

文章目录 中心论点国内就业现状勿让旧认知害了自己那出国留学真的一无是处了吗?1. 藤校仍旧是具有极高价值2. 时间成本低3. 研究生一定比单纯的本科找工作强!4. 很多人说出国读博好,可以无脑入,真是这样吗? 中心论点 如果在选择出国留学还是国内考研的最终核心诉求都是有更好…

Unity笔记:协程

协程 协程有IEnumerator类型返回值,所以总要有至少一个yield return xxx 基础入门直接看这个就够了:gamedevbeginner - Unity 中的协程(如何以及何时使用它们) 考虑使用协程的典型情况: 将对象移动到某个位置。为对象…

Spring Boot与Netty的完美结合:打造高性能网络通信

Spring Boot与Netty的完美结合:打造高性能网络通信 引言 在Java生态中,Spring Boot以其快速开发、简洁配置和丰富的生态支持赢得了众多开发者的喜爱。然而,当涉及到高性能、低延迟的网络通信时,传统的Servlet容器(如…

向量的内积、长度、正交性

目录 向量的内积 向量的长度(模) 标准正交基 标准正交化 正交矩阵 向量的内积 向量的长度(模) 标准正交基 标准正交化 正交矩阵

JavaWeb——014SpringBoot原理(配置优先级、Bean管理、SpringBoot原理)

SpingBoot原理 目录 SpingBoot原理1. 配置优先级2. Bean管理2.1 获取Bean2.2 Bean作用域2.3 第三方Bean 3. SpringBoot原理3.1 起步依赖3.2 自动配置3.2.1 概述3.2.2 常见方案3.2.2.1 概述3.2.2.2 方案一3.2.2.3 方案二 3.2.3 原理分析3.2.3.1 源码跟踪3.2.3.2 Conditional 3.2…

详解深度学习中的教师-学生模型(Teacher- Student Model)

文章目录 基本流程训练方法分类1. 软标签(Soft Labels)软化概率分布的具体步骤软化有什么好处? 2. 特征匹配(Feature Matching)3. 注意力转移(Attention Transfer)4. 知识图谱或规则迁移5. 隐空…

超市小程序有哪些功能 怎么制作

超市小程序是非常有用的工具,可以帮助超市提升用户体验,提高销售额。下面我们来看一下超市小程序可以具备哪些功能,以及如何制作一个高效的超市小程序。 1. **商品展示与搜索功能**:用户可以浏览超市的商品信息,包括价…

一篇搞定分布式缓存

缓存雪崩 缓存雪崩我们可以简单的理解为:由于原有缓存失效,新缓存未到期间所有原本应该访问缓存的请求都 去查询数据库了,而对数据库 CPU 和内存造成巨大压力,严重的会造成数据库宕机。从而形成一系列 连锁反应,造成整…

同等学力申硕专业介绍——管理学硕士

同等学力申硕的专业很多。 目前有十三大门类,分别是医学、法学、管理学、工学、教育学、经济学、艺术学、文学、历史学、理学、哲学、农学、军事学等,每个大门类中都有很多的细分专业。 今天为大家介绍同等学力申硕专业——管理学。 专业介绍 管理学是…

maven 包管理平台-07-plugins 常见插件介绍

拓展阅读 maven 包管理平台-01-maven 入门介绍 Maven、Gradle、Ant、Ivy、Bazel 和 SBT 的详细对比表格 maven 包管理平台-02-windows 安装配置 mac 安装配置 maven 包管理平台-03-maven project maven 项目的创建入门 maven 包管理平台-04-maven archetype 项目原型 ma…

【学习记录】PointLIO代码 update_iterated_dyn_share_modified 中函数指针的用法

最近在看PointLio的代码,有一部分看了半天没看懂,学习整理如下。 1、PointLio在迭代卡尔曼部分的代码 在esekfom.hpp中,有部分代码如下: void init_dyn_share_modified(processModel f_in, processMatrix1 f_x_in, measurement…

上班族真香副业:工资4500,靠steam游戏搬砖项目月入过w

steam游戏搬砖项目已经存在好多年了,这个项目比较冷门且能持续稳定盈利,是一个非常不错的项目。即使你没玩过steam游戏也没关系,这个steam游戏搬砖项目既不需要你会玩游戏,也不需要你懂英语。 steam游戏搬砖项目的盈利点在汇率差和…

【postgresql 基础入门】UPSERT语句,INSERT违反约束条件时可以转变为UPDATE语句,UPDATE与INSERT的合体

upsert插入更新 ​专栏内容: postgresql内核源码分析手写数据库toadb并发编程 个人主页:我的主页 管理社区:开源数据库 座右铭:天行健,君子以自强不息;地势坤,君子以厚德载物. 系列文章 入门准…

leetcode347.前K个高频元素

先使用map,统计每个字符出现的频率,然后使用优先队列根据字符出现频率存储字符,然后弹出堆中元素,弹出K次完成操作! 如果看不懂本题CPP语法的,可以参考我的另外一篇博客------------->CPP优先队列priori…