【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选项。
  • 要恢复到不同时间点的增量备份只需利用不同时间点的增量备份 在全量备份的基础上进行准备备份 然后恢复即可
  • 19
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值