centos7系统中xtrabackup数据备份工具的安装及使用

2023-06-01 00:00:00 数据 安装 备份工具

xtrabackup是一个对InnoDB做数据备份的工具,支持在线热备份等等,其他的就不过多介绍了,

直接进行安装前percona xtrabackup版本的选择吧。

xtrabackup2.4可以兼容mysql5.7和mysql5.6

直接下载: 
https://www.percona.com/downloads/Percona-XtraBackup-2.4/LATEST/
rpm:
https://downloads.percona.com/downloads/Percona-XtraBackup-2.4/Percona-XtraBackup-2.4.26/binary/redhat/7/x86_64/percona-xtrabackup-24-2.4.26-1.el7.x86_64.rpm

xtrabackup8.0可以兼容mysql8

直接下载: 
https://www.percona.com/downloads/Percona-XtraBackup-LATEST/
rpm:
https://downloads.percona.com/downloads/Percona-XtraBackup-LATEST/Percona-XtraBackup-8.0.29-22/binary/redhat/7/x86_64/percona-xtrabackup-80-8.0.29-22.1.el7.x86_64.rpm


安装xtrabackup数据备份工具

# 下载
wget https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-2.4.4/binary/redhat/7/x86_64/percona-xtrabackup-24-2.4.26-1.el7.x86_64.rpm

# 安装(rpm安装会有一些依赖包的问题)
rpm -ivh percona-xtrabackup-24-2.4.26-1.el7.x86_64.rpm

# 安装方式2(会自动解决下载安装依赖包)
yum localinstall -y percona-xtrabackup-24-2.4.26-1.el7.x86_64.rpm

如果出现以下报错:

The GPG keys listed for the “MySQL 5.7 Community Server” repository are already installed but they are not correct for this package.
Check that the correct key URLs are configured for this repository.
Failing package is: mysql-community-libs-compat-5.7.37-1.el7.x86_64
GPG Keys are configured as: file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql

原因是Mysql的GPG升级了,需要重新获取

使用以下命令重新获取:

rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022

然后再重新执行安装命令:

yum localinstall -y percona-xtrabackup-24-2.4.26-1.el7.x86_64.rpm

安装成功,看一下版本:

1.png



2.全量备份步骤

备份参数介绍:

--defaults-file=[mysql配置文件路径] 
--datadir=[mysql数据文件夹路径] 
--host=[mysql连接地址] 
--port=[mysql端口] 
--user=[mysql备份账号名称] 
--password=[mysql备份账号密码] 
--socket=[用于连接mysql的socket文件] 
--backup--target-dir=[指定备份的目录]

全量备份操作:

# 备份目录
/backup/mysql
# 执行全量备份
innobackupex --defaults-file=/etc/my.cnf --socket=/var/lib/mysql/mysql.sock --user=root --password=123456 /backup/mysql
#  按Y-m-d目录生成
innobackupex --defaults-file=/etc/my.cnf --socket=/var/lib/mysql/mysql.sock --user=root --password=123456 /backup/mysql/$(date +%Y-%m-%d)
# 压缩备份
innobackupex --defaults-file=/etc/my.cnf --socket=/var/lib/mysql/mysql.sock --compress --compress-threads=2 --user=root --password=123456 /backup/mysql/compress_$(date +%Y-%m-%d)
# 解压(需要先安装qpress解压工具)
innobackupex --defaults-file=/etc/my.cnf --decompress /backup/mysql/compress_2022-09-18

安装qpress解压工具

# 安装 percona yum源
yum -y install https://downloads.percona.com/downloads/percona-release/percona-release-1.0-9/redhat/percona-release-1.0-9.noarch.rpm
# 安装qpress
yum -y install qpress
# 安装的另外一种方式
wget "http://docs-aliyun.cn-hangzhou.oss.aliyun-inc.com/assets/attach/183466/cn_zh/1608011575185/qpress-11-linux-x64.tar"
tar xvf qpress-11-linux-x64.tar
chmod +x qpress
cp qpress /usr/local/bin

查看备份数据

cd /backup/mysql && ls


场景:模拟删除一个数据表模拟线上事故

恢复全量备份操作:

# []第一步: 先停止mysql服务
systemctl stop mysqld
# []第二步: 删除旧的mysql数据目录(这边直接用mv重命名,方便操作失败、直接恢复旧的mysql数据)
mv /var/lib/mysql /var/lib/mysql_bak20220916
# []第三步:准备(prepare)一个完全备份
# 作用:准备(prepare)一个完全备份: --apply-log ( /backup/mysql/2022-09-17_17-15-14/ 为备份目录,执行之后 xtrabackup_checkpoints 文件中的 backup_type = full-prepared )
# 重放事务日志,使所有的数据处于同一个时间点,达到一致性状态(在恢复前,需要使用--apply-log参数先进行合并数据文件,确保数据的一致性要求)
innobackupex --apply-log /backup/mysql/2022-09-17_17-15-14
# []第四步:执行恢复操作:
innobackupex  --defaults-file=/etc/my.cnf --copy-back --rsync /backup/mysql/2022-09-17_17-15-14
# []第五步: 更改mysql目录权限
chown -R mysql:mysql /var/lib/mysql
# []第六步: 并启动mysql
systemctl start mysqld


3.增量备份步骤

说明:

第一次全备,第二次在全备的基础上做增量,第三次在第二次增量备份上做增量,同理第四次在第三次的基础上做增量…….(恢复的时候也是依次,第一次整合全备,第二次全备基础是整合增量备份的。

第三次在第二次增量基础上整合增量。)


增量备份操作:

# 增量备份目录(会自动创建)
/backup/mysql_increment
# 全量备份目录
/backup/mysql_full
# 第一步:先执行一次全备份
innobackupex --defaults-file=/etc/my.cnf --socket=/var/lib/mysql/mysql.sock --user=root --password=123456 /backup/mysql_full
# 第二步:可以模拟新增一张数据表或者数据
# 第三步:执行增量备份one(数据是基于上次的全量备份:/backup/mysql_full/2022-09-17_23-38-46)
innobackupex --defaults-file=/etc/my.cnf --socket=/var/lib/mysql/mysql.sock --user=root --password=123456 --incremental /backup/mysql_increment --incremental-basedir=/backup/mysql_full/2022-09-17_23-38-46 --parallel=2
# ....
# 注意:增量备份two、three...: 每次增量备份的数据都要基于上次备份

查看备份的数量:

2.png


增量数据表恢复:

第一步:

恢复完全备份(注意这里一定要加–redo-only 参数,该参数的意思是只应用 xtrabackup 日志中已提交的事务数据,不回滚还未提交的数据)

innobackupex --apply-log --redo-only /backup/mysql_full/2022-09-17_23-38-46

第二步:

将增量备份 one 应用到 完全备份,到最后一次增量备份去掉–redo-only 参数,如果有多个增量备份,重复此操作

innobackupex --apply-log /backup/mysql_full/2022-09-17_23-38-46 --incremental-dir=/backup/mysql_increment/2022-09-17_23-44-10

第三步:

把所有合在一起的完全备份整体进行一次 apply 操作,回滚未提交的数据

innobackupex --apply-log /backup/mysql_full/2022-09-17_23-38-46

第四步:

把恢复完的备份复制到数据库目录文件中,赋权,然后启动 mysql 数据库,检测数据正确性

# 停止数据库服务
systemctl stop mysqld
# 备份旧的mysql数据目录
mv /var/lib/mysql /var/lib/mysql_bak
# 执行恢复数据操作
innobackupex --defaults-file=/etc/my.cnf --copy-back --rsync /backup/mysql_full/2022-09-17_23-38-46
# 修改目录权限
chown -R mysql:mysql /var/lib/mysql
# 重新启动mysql
systemctl start msyqld


总结

数据库备份可以使用全量备份加上增量备份同时使用,例如:

每天一次全量备份,然后每个小时执行一次增量备份,因为增量备份恢复步骤比较多,到时候可以写成一个脚本去执行。

xtrabackup优点就不说了,有一点缺点要说一下就是占用空间大,不过解决方式就是备份时可以用

–compress 参数压缩,缩减体积。

相关文章