数据备份与恢复MySQL8.0-XtraBackup80

Xtrabackup工具介绍

Mysql备份的两种方式:

    XtraBackup是Percona公司CTO Vadim参与开发的一款基于InnoDB的在线热备工具,具有开源、免费、支持在线热备、备份恢复速度快、占用磁盘空间小等特点,并且支持不同情况下的多种备份形式。

注意:

Percona XtraBackup 8.0不支持对 MySQL 8.0之前的版本、 Percona Server for MySQL Percona XtraDB Cluster 中创建的数据库进行备份。由于 MySQL 8.0在数据字典、重做日志和撤销日志中引入的更改与以前的版本不兼容,Percona XtraBackup 8.0目前不可能同时支持8.0之前的版本。

备份出来的文件中,除了数据文件,还有以下额外的文件

  • backup-my.cnf:该文件不是 MySQL 参数文件的备份,只是记录了一些 Innodb 引擎的参数,会在 Prepare 阶段用到。
  • xtrabackup_logfile:该文件用来保存拷贝的 redo log
  • xtrabackup_binlog_infobinlog 位点信息和 GTID 信息。使用该备份恢复后,需要从该 binlog 位点进行增量恢复。
  • xtrabackup_checkpoints:该文件记录了备份类型和 LSN 信息。
  • xtrabackup_info:该文件中,记录备份的详细信息。
  • xtrabackup_tablespaces:记录备份集中表空间的信息

测试环境  

Centos 7.9  连接外部网络

Mysql8.0.20

Xtrabackup 安装(源码安装)

  • 下载xtarbackup压缩包

Software Downloads - Percona

选择对应安装压缩包

  • 解压,并自定义安装目录

Xftp 工具上传至mysql数据库服务器

tar -zxvf 解压安装包

自定义安装目录,并重命名

设置环境变量--编辑环境变量文件 /etc/profile

在最后一行添加

export PATH=$PATH:/usr/local/xtrabackup/bin

使环境变量生效

[root@xxx soft]# source /etc/profile

检查是否安装成功 

  • 下载解压缩工具并安装(用到压缩功能使用)

wget https://dl.fedoraproject.org/pub/epel/7/x86_64/Packages/z/zstd-1.5.5-1.el7.x86_64.rpm

xtrabackup使用场景

Xtrabackup 备份恢复有三个阶段:

第一阶段 备份阶段,将物理文件拷贝到备份目录。

第二阶段 Prepare 阶段,应用 redo log 将数据文件恢复到备份结束时的一致性状态。

第三阶段 恢复阶段 就是将备份文件拷贝到 MySQL 数据目录下面。

备份

完全备份

测试数据准备,新建数据库full,创建表数据

普通备份

xtrabackup --backup -u root -H 127.0.0.1 -P3306 -p123456 --parallel=5 --target-dir=/tmp/backup/full/

显示Completed ok 备份成功

关键参数介绍:

–backup:发起全量备份。

-u, -H, -P, -p:连接 mysql 实例,用户名、主机 IP、端口、密码。

–target-dir:备份文件的存放路径。

–parallel:并发拷贝的线程数。

备份集:

流式备份

Percona XtraBackup 支持的流式传输模式,将备份以 xbstream 格式发送到 STDOUT,而不是将文件复制到备份目录

STDOUT: 是指将程序的 输出 结果显示到屏幕或其他设备上的过程。 当程序执行完成后,它会将结果 输出 标准输出 流中,然后显示在屏幕上供用户观察。

xtrabackup --backup  -u root -H 127.0.0.1 -P3306 -p123456 --stream=xbstream --target-dir=/bak/full > /bak/full/backup.xbstream

显示Completed ok 备份成功

关键参数介绍:

--stream=xbstream   使用流式备份,采用xbstream流格式。

在 xtrabackup 2.4 版中支持 tar 和 xbstream 流格式,但 tar 格式不支持并行备份。

在 xtrabackup 8.0 中,仅支持 xbstream 流格式,不再支持 tar 格式。

备份集(大小与普通备份大小一致)

压缩备份

xtrabackup --backup -u root -H 127.0.0.1 -P3306 -p123456 --compress --parallel=5 --target-dir=/bak/full/backupyasuo_`date +"%F_%H_%M_%S"`

显示Completed ok 备份成功

关键参数介绍:

--compress  开启压缩

备份集 

增量备份简介

xtrabackup 支持增量备份,这意味着它们只能复制自上次备份以来发生变化的数据(差异增量)。

增量备份实际上不会将数据文件与先前备份的数据文件进行比较。 因此,在部分备份后运行增量备份可能会导致数据不一致。

增量备份只需读取页面并将其 LSN 与上次备份的 LSN 进行比较。 但是,您仍然需要完整备份来恢复增量更改; 如果没有完整备份作为基础,增量备份就毫无用处。

增量背后开始和全量备份一样。xtrabackup 在备份目标目录中写入一个被称为xtrabackup_checkpoints的文件。这个文件包含一行显示to_lsn,在备份的最后是数据库的LSN

普通备份增量

第一次增量备份添加数据

第一次增量备份需要使用普通完全备份集(包含xtrabackup_checkpoints)

xtrabackup --backup -u root -H 127.0.0.1 -P3306 -p123456 --parallel=5 --target-dir=/tmp/backup/inc1 --incremental-basedir=/tmp/backup/full

主要参数:

–incremental-basedir:全量备份或上一次增量备份 xtrabackup_checkpoints 文件所在目录。

查看增量备份集

第二次增量备份添加数据

命令:

xtrabackup --backup -u root -H 127.0.0.1 -P3306 -p123456 --parallel=5 --target-dir=/tmp/backup/inc2 --incremental-basedir=/tmp/backup/inc1

查看增量备份集

差异备份(以第二次增量跳过第一次增量为例)

命令:

xtrabackup --backup -u root -H 127.0.0.1 -P3306 -p123456 --parallel=5 --target-dir=/tmp/backup/inc3 --incremental-basedir=/tmp/backup/full

查看增量备份集

备份集大小对比

流式备份增量

第一次增量备份添加数据

第一次增量备份需要使用普通完全备份集(包含xtrabackup_checkpoints)

流格式 à 普通备份集

[root@xxx ~]# mkdir -p /bak/full/xbstreambackup 

[root@xxx ~]# xbstream -x --parallel=10 -C /bak/full/xbstreambackup < /bak/full/backup.xbstream

xbstream 命令重要参数

-x 表示解压,

–parallel 表示并行度,

-C 指定解压的目录,最后一级目录必须存在(先创建目录)

xtrabackup --backup  -u root -H 127.0.0.1 -P3306 -p123456 --stream=xbstream --incremental-basedir=/bak/full/xbstreambackup --target-dir=./ > /bak/zengliang/inc1.xbstream

主要参数:

–incremental-basedir:全量备份或上一次增量备份 xtrabackup_checkpoints 文件所在目录。

查看增量备份集

第二次增量备份添加数据

第二次增量备份,需要第一次增量备份集(流式备份集à普通备份集)

[root@xxx zengliang]# xbstream -x -C inc1 < inc1.xbstream

参考转换备份集类型 。

命令:

xtrabackup --backup  -u root -H 127.0.0.1 -P3306 -p123456 --stream=xbstream --incremental-basedir=/bak/zengliang/inc1 --target-dir=./ > /bak/zengliang/inc2.xbstream

查看增量备份集

恢复

完全恢复

恢复准备阶段

阶段简介

首先要进行 Prepare 阶段,在该阶段 Xtrabackup 会启动一个嵌入的 InnoDB 实例来进行 Crash Recovery。

数据文件在准备好之前不是时间点一致的,因为它们在程序运行时在不同的时间被复制,并且在发生这种情况时它们可能已被更改。

在准备操作期间,xtrabackup 会启动一种经过修改的嵌入式 InnoDB(链接 xtrabackup 的库)。这些修改对于禁用 InnoDB 标准安全检查是必要的

注意:

建议不要在准备备份时中断xtrabackup进程,因为它可能会导致数据文件损坏,并且备份将变得不可用。 如果准备过程中断,则不保证备份有效性

转换备份集类型

恢复前需要将所有类型备份集都转为普通备份集

流格式 à 普通备份集

[root@xxx ~]# mkdir -p /bak/full/xbstreambackup 

[root@xxx ~]# xbstream -x --parallel=10 -C /bak/full/xbstreambackup < /bak/full/backup.xbstream

xbstream 命令重要参数

-x 表示解压,

–parallel 表示并行度,

-C 指定解压的目录,最后一级目录必须存在(先创建目录)

压缩备份 à 普通备份集

Xtrabackup 8.0 支持两种压缩算法 zstd(默认) 和 lz4 算法,Xtrabackup 5.7 仅支持 quicklz 算法。

其中 zstd 在解压缩时依赖 zstd 需要安装才能进行解压。quicklz 算法依赖 qpress 也需要安装后才能进行解压。

[root@xxx ~]# xtrabackup --decompress --parallel=5 --target-dir=/bak/full/backupyasuo_2024-01-31_14_48_26/

2024-01-31T15:59:46.984995+08:00 0 [Note] [MY-011825] [Xtrabackup] completed OK!

表示解压缩成功

需要注意:

解压过程中,同样可以指定 --parallel 参数,进行并行解压。

解压后,默认不会删除压缩文件。如果需要删除,可以指定 --remove-original 参数。

即便压缩文件没有被删除,当使用 --copy-back 将备份拷贝到数据目录时,默认也不会拷贝这些压缩文件。

--remove-original  执行后备份集

备份集准备命令

执行注意

如果您打算将该备份作为进一步增量备份的基础,则应在准备备份时使用 --apply-log-only 选项,否则您将无法对其应用增量备份。

命令:

xtrabackup --prepare --use-memory=2G --target-dir=/bak/full/backup(备份集)

重要参数:

该实例的缓冲池的大小由 --use-memory 参数指定,默认为 100MB。如果有充足的内存,通过设置较大的 memory 可以减少 Prepare 阶段花费的时间。

准备工作执行后备份集

数据库准备操作

删除full 数据库验证恢复

  1. 1、关闭数据库
[root@xxx ~]# mysql -uroot -p123456

mysql> shutdown;

  1. 2、更改数据库数据目录名称(恢复成功后删除)
[root@xxx ~]# mv /data/mysql8_data/mysql/ /data/mysql8_data/mysqlbak

执行恢复命令

  1. 1、执行恢复操作
[root@xxx]# xtrabackup --defaults-file=/usr/local/etc/my.cnf --copy-back --parallel=10 --target-dir=/bak/full/backupyasuo

重要参数说明:

--parallel=10   表示并行数(根据实际情况设置)

--defaults-file 数据库配置文件

--copy-back 表示将备份数据文件拷贝到 MySQL 数据目录下。如果在存储空间不足的情况下,可以使用 --move-back 表示移动备份文件。

压缩文件没有被删除,当使用 --copy-back 将备份拷贝到数据目录时,默认也不会拷贝这些压缩文件。

  1. 2、授权数据库数据库目录
[root@xxx mysql8_data]# chown -R mysql:mysql /data/mysql8_data/mysql

  1. 3、启动数据库
[root@xxx ~]# mysqld_safe --defaults-file=/usr/local/etc/my.cnf &

数据验证:

增量恢复

恢复准备阶段(Prepare 阶段)

增量备份的 --prepare 步骤与完整备份不同。 在完整备份中,执行两种类型的操作来使数据库保持一致:针对数据文件从日志文件重放已提交的事务,以及回滚未提交的事务。 在准备增量备份时,您必须跳过未提交事务的回滚,因为备份时未提交的事务可能正在进行中,并且很可能会在下一次增量备份中提交。。你需要指定xtrabackup --apply-log-only 选项来阻止回滚阶段。

完全备份集执行准备:

[root@xxx ~]# xtrabackup --prepare --apply-log-only --target-dir=/bak/full/xbstreambackup/

第一次增量执行准备:

[root@xxx ~]# xtrabackup --prepare --apply-log-only --target-dir=/bak/full/xbstreambackup/ --incremental-dir=/bak/zengliang/inc1/

第二次增量执行准备:

[root@xxx ~]# xtrabackup --prepare --apply-log-only --target-dir=/bak/full/xbstreambackup/ --incremental-dir=/bak/zengliang/inc2/

数据库准备操作

删除full 和zengliang数据库验证恢复

  • 关闭数据库
[root@xxx ~]# mysql -uroot -p123456

mysql> shutdown;

  • 更改数据库数据目录名称(恢复成功后删除)
[root@xxx ~]# mv /data/mysql8_data/mysql/ /data/mysql8_data/mysqlbak

执行恢复命令

  • 执行增量准备后恢复操作

需要再执行准备prepare 命令(不带--apply-log-only参数)。否则报错如下

[root@xxx ~]# xtrabackup --prepare --target-dir=/bak/full/xbstreambackup/

进入到备份目录执行。

[root@xxx ~]# cd /bak/full/xbstreambackup/

[root@xxx xbstreambackup]# xtrabackup --defaults-file=/usr/local/etc/my.cnf --copy-back --parallel=10 --target-dir=./

重要参数说明

--parallel=10   表示并行数(根据实际情况设置)

--defaults-file 数据库配置文件

--copy-back 表示将备份数据文件拷贝到 MySQL 数据目录下。如果在存储空间不足的情况下,可以使用 --move-back 表示移动备份文件。

  1. 2、授权数据库数据库目录
[root@xxx mysql8_data]# chown -R mysql:mysql /data/mysql8_data/mysql

  1. 3、启动数据库
[root@xxx ~]# mysqld_safe --defaults-file=/usr/local/etc/my.cnf &

第一次增量恢复验证数据恢复成功

第二次增量恢复验证数据恢复成功

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值