【MySQL备份】Percona XtraBackup增量备份实战篇

目录

1.前言

2.准备工作

2.1.环境信息

2.2.创建备份目录

2.3.配置/etc/my.cnf文件 

2.4.授予root用户BACKUP_ADMIN权限

3.增量备份

3.1.第一步:全量备份

3.2.第二步:增量备份

3.3.第三步:再次增量备份 

4.准备备份

4.1.准备全量备份

4.2.逐个应用增量备份

4.3.最终准备

5.备份恢复

6.总结 


"实战演练:利用Percona XtraBackup执行MySQL增量备份操作详解"

1.前言

在承接上篇【MySQL备份】Percona XtraBackup全量备份实战篇智慧之后,我们再度启航,深化对Percona XtraBackup这一强大工具的探索之旅。本章节,我们将从全量备份的稳固基石出发,迈向更加精细化的领域——增量备份实战策略。在这里,不仅会揭示如何高效地运用Percona XtraBackup捕获数据库的每一次微妙变化,还会详述如何在数据海洋的波涛中,精准锚定并保护那些宝贵的新增信息,从而构建起一道既灵活又坚不可摧的数据防护网。

通过本篇的深入解析,您将学会如何在不影响数据库正常运行的前提下,以最小的资源开销,实现对数据库变化的持续追踪与备份。我们将一步步揭开增量备份的神秘面纱,从策略规划、命令行操作的细微调整,到备份效率与数据一致性的双重优化,全方位展示如何在数据保护的征途中,步步为营,稳扎稳打。

不论是对于寻求优化备份策略的数据库管理员,还是渴望深入了解MySQL备份机制的IT专业人员,本文都将是一份不可或缺的实战指南,旨在助力您在数据保护的道路上行稳致远,让每一次数据备份都成为数据安全的一块坚固磐石。

2.准备工作

2.1.环境信息

主机IP操作系统Mysql版本XtraBackup版本
172.17.0.2CentOS Stream release 98.0.378.0.35

2.2.创建备份目录

mkdir -p /data/full_backup

2.3.配置/etc/my.cnf文件 

[xtrabackup]
host=localhost
port=3306
user=root
password=123456
socket=/var/lib/mysql/mysql.sock
target_dir=/data/full_backup

2.4.授予root用户BACKUP_ADMIN权限

grant BACKUP_ADMIN on *.* to 'root'@'%'

LOCK INSTANCE FOR BACKUP 是MySQL 8.0引入的一种新的备份相关SQL语句,主要用于在进行数据库备份时,以一种更为细粒度和高效的方式控制对数据库实例的访问,以保证备份的一致性。这个命令的工作原理及特点如下:

目的:在执行备份操作时,此命令用于获取一个实例级别的锁,该锁允许在备份过程中继续执行DML(数据操作语言,如INSERT、UPDATE、DELETE)操作,同时防止那些可能导致数据快照不一致的DDL(数据定义语言,如CREATE、ALTER、DROP)操作和某些管理操作。这样可以在不影响数据库服务的情况下进行备份,特别适用于需要最小化服务中断的在线备份场景。

权限需求:执行LOCK INSTANCE FOR BACKUP语句需要用户具备BACKUP_ADMIN权限。这是一个专门为了备份相关的高级操作而设计的权限级别。

兼容性:此特性是在MySQL 8.0及以上版本中引入的,早于8.0的MySQL版本并不支持这一语句,因此在使用旧版本时,可能需要依赖其他机制(如FLUSH TABLES WITH READ LOCK)来确保备份的一致性。

解锁:执行备份后,需要使用UNLOCK INSTANCE语句来释放之前由LOCK INSTANCE FOR BACKUP获得的锁,从而恢复正常操作。

与传统备份命令的对比:相比于传统的备份方法,如使用FLUSH TABLES WITH READ LOCK,LOCK INSTANCE FOR BACKUP提供了更小的性能影响,因为它不会完全阻止写操作,只是限制了可能引起数据不一致的活动,更适合于高可用性和高性能要求的生产环境。

3.增量备份

登陆数据库查看现有的数据,可以看到tes1库中有两个表

3.1.第一步:全量备份

xtrabackup --backup --target-dir=/data/full_backup --user=root --password=123456 --host=172.17.0.2 --port=3306
  • --target-dir=/data/full_backup 指定了全量备份的目标目录。

如果查看xtrabackup_checkpoints文件,应该会看到类似的内容 内容取决于您的LSN编号:

3.2.第二步:增量备份

登陆数据库创建一个employees 表为后面的测试做准备

CREATE TABLE employees (
     id INT AUTO_INCREMENT,          -- 自增的ID作为主键
     first_name VARCHAR(50) NOT NULL, -- 姓名,最大长度50,不能为空
     email VARCHAR(100) UNIQUE,      -- 电子邮件,最大长度100,必须唯一
     hire_date DATE,                 -- 入职日期
     PRIMARY KEY (id)                -- 指定id列为表的主键
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; -- 使用InnoDB存储引擎,字符集为utf8mb4支持更多字符

在第一次全量备份之后,你可以进行增量备份。增量备份只备份自上次备份以来发生变化的数据。

xtrabackup --backup --incremental-basedir=/data/full_backup --target-dir=/data/incr_backup_1 --user=root --password=123456 --host=172.17.0.2 --port=3306
  • --incremental-basedir=/data/full_backup 指定了增量备份的基础全量备份目录。
  • --target-dir=/data/incr_backup_1 指定了这次增量备份的目标目录。

这里xtrabackup_checkpoints的 from_lsn是备份的起始LSN,对于增量备份,它必须与上一个/基本备份的to_lsn(如果是最后一个检查点)相同 备份.

3.3.第三步:再次增量备份 

如果你需要进行多次增量备份,只需重复执行增量备份命令,并每次更改--target-dir的值即可。例如,第二次增量备份: 

这里我们登陆数据库再次创建一个employees 1表为后面的测试做准备

CREATE TABLE employees1 (
     id INT AUTO_INCREMENT,          -- 自增的ID作为主键
     first_name VARCHAR(50) NOT NULL, -- 姓名,最大长度50,不能为空
     email VARCHAR(100) UNIQUE,      -- 电子邮件,最大长度100,必须唯一
     hire_date DATE,                 -- 入职日期
     PRIMARY KEY (id)                -- 指定id列为表的主键
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; -- 使用InnoDB存储引擎,字符集为utf8mb4支持更多字符

xtrabackup --backup --incremental-basedir=/data/incr_backup_1 --target-dir=/data/incr_backup_2 --user=root --password=123456 --host=172.17.0.2 --port=3306

 这里xtrabackup_checkpoints的 from_lsn是备份的起始LSN,对于增量备份,它必须与上一个/增量备份的to_lsn(如果是最后一个检查点)相同 备份.

4.准备备份

当您完成了全量备份以及一系列增量备份后,若需要恢复数据到某个时间点,您需要按照以下步骤准备增量备份: 

4.1.准备全量备份

首先,需要准备全量备份,这一步通常会应用日志文件到数据文件上,确保数据的一致性。命令如下:

xtrabackup --prepare --apply-log-only --target-dir=/data/full_backup

 

4.2.逐个应用增量备份

接下来,按照时间顺序,对每个增量备份执行准备操作,将增量备份中的变化应用到前一个备份(全量或上一个增量)的准备结果上。例如,对于第一个增量备份:

xtrabackup --prepare --apply-log-only --incremental-dir=/data/incr_backup_1 --target-dir=/data/full_backup

 

对于后续的增量备份,重复上述命令,每次更新--incremental-dir指向下一个增量备份目录,而--target-dir保持不变,指向已准备好的全量备份目录。

xtrabackup --prepare --apply-log-only --incremental-dir=/data/incr_backup_2 --target-dir=/data/full_backup

 

4.3.最终准备

一旦所有增量备份都已应用,全量备份目录中的数据就反映了所有备份点的累计变化,处于一个可以恢复的状态。如果这是最后一个步骤,您可能不再需要使用--apply-log-only选项,而是直接执行--apply-log来最终准备数据以供使用或恢复到MySQL服务器: 

xtrabackup --prepare --target-dir=/data/full_backup

5.备份恢复

首先登陆数据库删除之前创建的2个表为后面测试做准备

停止MySQL服务进行恢复数据 

systemctl stop mysqld
rsync -avrP /data/full_backup/ /var/lib/mysql/

恢复数据时,一定要记得更改数据目录下的文件拥有者以及所属组权限,否则mysql无法启动 

 重启数据库查看数据是否恢复,可以看到之前被删除的表已经成功恢复

6.总结 

  • 对于全量备份,在准备阶段中,需要将已提交事务从日志文件写入数据文件,回滚未提交的事务,确保数据处于一致性状态。
  • 对于增量备份,在准备阶段中,不能回滚未提交的事务,因为事务可能在下次备份中提交。因此必须使用 --apply-log-only选项来阻止回滚阶段,否则你的增量备份将毫无用处。事务回滚后,无法应用下一次的增量备份。
  • 如果有多次增量备份,最后一次增量备份prepare准备阶段则不能使用–apply-log-only选项,之前的增量备份则需要使用–apply-log-only选项。
  • 要恢复到不同时间点的增量备份只需利用不同时间点的增量备份 在全量备份的基础上进行准备备份 然后恢复即可

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

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

相关文章

秋招Java后端开发冲刺——基础篇5(String集合)

一、String String类是Java中字符串操作类,位于java.lang包下String类型对象的底层使用字符数组char[]存储字符串,由final修饰且没有提供公共的修改方法,因此String对象是不可变的。常见方法 方法名作用trim()去掉字符串首尾空字符split(分…

【面试系列】产品经理高频面试题及详细解答

欢迎来到我的博客,很高兴能够在这里和您见面!欢迎订阅相关专栏: ⭐️ 全网最全IT互联网公司面试宝典:收集整理全网各大IT互联网公司技术、项目、HR面试真题. ⭐️ AIGC时代的创新与未来:详细讲解AIGC的概念、核心技术、…

我在国企当合同工的那段日子

心血来潮 25号考完了,非常不理想,果然700页的东西不是一个月能搞完的。不对,我今儿写日志是为了纪念一下我的第一家公司,咋扯到别的了…言归正传,我在第一家公司待了仨年,可能是年纪到了(26岁咋还不退休啊…

发送微信消息和文件

参考:https://www.bilibili.com/video/BV1S84y1m7xd 安装: pip install PyOfficeRobotimport PyOfficeRobotPyOfficeRobot.chat.send_message(who"文件传输助手", message"你好,我是PyOfficeRobot,有什么可以帮助…

SpringBoot中整合ONLYOFFICE在线编辑

SpringBoot整合OnlyOffice SpringBoot整合OnlyOffice实现在线编辑1. 搭建私有的OnlyOffice的服务2. SpringBoot进行交互2.1 环境2.2 我们的流程2.3 接口规划2.3.1 获取编辑器配置的接口2.3.2 文件下载地址2.3.3 文件下载地址 3. 总结4. 注意4.1 你的项目的地址一定一定要和only…

gcc versions later than 10 are not supported!

如何修改Linux服务器gcc和g版本 查看gcc和g版本 gcc -vg -v修改gcc和g版本 家目录创建./local/bin文件夹 mkdir -p ~/.local/bin把 ~/.local/bin 加到你的 PATH 里 打开~/.bashrc 然后 export PATH~/.local/bin:$PATH后source ~/.bashrc将gcc和g需要的版本加入 ~/.local/bin…

Elasticsearch-Rest-Client

Elasticsearch-Rest-Client&#xff1a;官方RestClient&#xff0c;封装了ES操作&#xff0c;API层次分明&#xff0c;上手简单。 1. 导入依赖 <dependency> <groupId>org.elasticsearch.client</groupId> <artifactId>elasticsearch-rest-high…

激光粒度分析仪计量校准规范:确保测量精度的关键

激光粒度分析仪作为现代科研与工业生产中不可或缺的分析工具&#xff0c;广泛应用于陶瓷、土壤、制药、建材、环保等众多领域。 其通过激光散射原理&#xff0c;快速准确地测量颗粒材料的粒度分布&#xff0c;为材料科学研究、产品质量控制及环境保护等提供了强有力的技术支持…

罗德和神牛、西圣无线麦克风哪个好用?罗德、西圣多方位实测对比

随着短视频行业的兴起&#xff0c;越来越多人开始加入自媒体创作的行业中&#xff0c;不过对于短视频而言&#xff0c;光有好的画面是不够的&#xff0c;还需要清晰、干净的声音。而无线领夹麦适用于唱歌、直播、吃播、短视频、访谈等场景使用&#xff0c;而且能够极大的提高声…

微信小程序渲染层与逻辑层交互原理

1. 网页开发与小程序开发有何不同&#xff1f; 2. 小程序运行环境 3. 页面渲染技术选型 1. 纯客户端技术&#xff1b; 2. 纯Web技术&#xff1b; 3. 用客户端原生技术与Web技术结合的混合技术&#xff08;Hybrid&#xff09;&#xff0c;小程序就是使用的这种技术&#xff1…

dledger原理源码分析系列(一)-架构,核心组件和rpc组件

简介 dledger是openmessaging的一个组件&#xff0c; raft算法实现&#xff0c;用于分布式日志&#xff0c;本系列分析dledger如何实现raft概念&#xff0c;以及dledger在rocketmq的应用 本系列使用dledger v0.40 本文分析dledger的架构&#xff0c;核心组件&#xff1b;rpc组…

抠图后怎么跟背景自然融合?分享3款工具

抠图后怎么跟背景自然融合&#xff1f;将抠图后的图片与背景自然融合可以极大地提升图像的整体视觉效果&#xff0c;使我们能够更方便地创造出丰富多彩、独具特色的设计作品。无论是广告海报、产品展示还是社交媒体分享&#xff0c;自然融合的背景都能让抠图元素与周围环境融为…

【Kaggle】Telco Customer Churn 数据编码与模型训练

&#x1f4ac;在上一部分中&#xff0c;我们已经完成了对数据集背景解读、数据预处理与探索性分析。在数据背景解读中&#xff0c;我们介绍了数据集来源、电信用户流失分析的基本业务背景&#xff0c;并详细解释了每个字段的基本含义&#xff1b;在数据预处理过程中&#xff0c…

11集在Docker上编译tensorFlow Lite MCU例子工程-《MCU嵌入式AI开发笔记》

【11集在Docker上编译tensorFlow Lite MCU例子工程-《MCU嵌入式AI开发笔记》】 这一集咱们一步一步的在doc下面编译TensorFlow Lite的例程 https://tensorflow.google.cn/lite/tutorials?hlzh-cn 进入这个例子&#xff1a; https://codelabs.developers.google.cn/codelabs/…

Python学习笔记六

1.实现4*4随机矩阵 #生成一个随机4*4的数组 import numpy as np np.random.seed(1)#固定随机数 每次都是同一个 &#xff08;&#xff09;里面的数字不同 对应的随机数也不同 np.random.rand() anp.random.randint(0,100,16).reshape(4,4)#0~100的随机整数 包含16个元素 pri…

Java学习 (六) 面向对象--this、继承、方法重写、super

一、this 关键字 1、this 演示 vi Person.java public class Person {String name;int age;//显示声明构造器public Person(String s , int i){name s;age i;}public void setAge(int age){age age;}}vi PersonTest.java public class PersonTest {public static void m…

FuTalk设计周刊-Vol.063

#AI漫谈 热点捕手 1.设计师必看&#xff01;GPTs让你的创意飞起来&#xff01; 我们将深入探讨什么是GPTs、其强大功能和独特优势&#xff0c;以及一些值得推荐的GPT应用和获取途径。 链接https://mp.weixin.qq.com/s/EtVxF9XYvCu6ANFfotortA 2.Figma Config 2024 大会内容回…

考研生活day2--王道课后习题2.3.1、2.3.2、2.3.3

2.3.1 题目描述&#xff1a; 这题和曾经做过的LeetCode203.移除元素一模一样&#xff0c;所以我们就使用LeetCode进行书写&#xff0c;题目链接203. 移除链表元素 - 力扣&#xff08;LeetCode&#xff09; 解题思路 大家的第一反应肯定是根据书上所学的书写方法一样书写&…

为什么这几年参加PMP考试的人越来越多

参加PMP认证的人越来越多的原因我认为和社会发展、职场竞争、个人提升等等方面有着不小的关系。国际认证与国内认证的性质、发展途径会有一些区别&#xff0c;PMP引进到中国二十余年&#xff0c;报考人数持增长状态也是正常的。 具体可以从下面这几个点来展开论述。 市场竞争…

【技术追踪】SegGuidedDiff:基于分割引导扩散模型实现解剖学可控的医学图像生成(MICCAI-2024)

它来了它来了&#xff0c;它带着 mask 做生成了~ SegGuidedDiff&#xff1a;提出一种用于解剖学可控医学图像生成的扩散模型&#xff0c;在每个采样步骤都遵循多类解剖分割掩码并结合了随机掩码消融训练算法&#xff0c;可助力乳房 MRI 和 腹部/颈部到骨盆 CT 等任务涨点。 论文…