MySQL物理备份(xtrabackup中级篇)

生产环境下,面对TB级别的大数据量,我们该如何快速备份,又如何在磁盘空间不足情况下,完成艰巨的备份任务,本文将给出一个经过实战检验的可行性方案。

何为增量备份

针对一段时间以内变化的数据进行备份。具有如下特点:
1、缩小备份数据大小。
2、降低备份时间。

组件版本:

MySQLxtrabackup
5.7.422.4.26

增量备份前的准备

开始增量备份之前,必须执行一次全量备份,并拿到本次全量备份的incremental-lsn(如下图)。

在这里插入图片描述

(全量备份及incremental lsn)
# 执行增量备份
#--incremental-lsn=2778819 
#为上一次全量备份incremental lsn号

mkdir -p /target_backup/
cd /target_backup/
xtrabackup --no-defaults \
--no-lock \
--binlog-log=off \
--core-file \
--backup \
--incremental-lsn=2778819 \
--compress \
--compress-threads=16 \
--stream=xbstream \
--datadir=/var/lib/mysql \
--socket=/var/lib/mysql/mysql.sock \
--target-dir=/target_backup/ > inc.dat

在这里插入图片描述

(执行增量备份)

在这里插入图片描述

(增量备份完成)

完成后备份文件即保存在了inc.dat文件中。

在两次全量备份之间,可以有多次增量备份,下面我们进行第二次增量备份。

第二次增量备份


#--incremental-lsn=2793409 
#为上一次增量备份的lsn

mkdir -p /target_backup/
cd /target_backup/
xtrabackup --no-defaults \
--no-lock \
--binlog-log=off \
--core-file \
--backup \
--incremental-lsn=2793409 \
--compress \
--compress-threads=16 \
--stream=xbstream \
--datadir=/var/lib/mysql \
--socket=/var/lib/mysql/mysql.sock \
--target-dir=/target_backup/ > inc_2.dat

在这里插入图片描述

(开始第二次增量备份)

在这里插入图片描述

(第二次增量备份完成)

增量备份恢复

1、增量备份恢复必须有第一次的全量备份,以及中间的多次增量备份。
2、可以把数据恢复到第一次的全量备份或某一次的增量备份。
3、操作的顺序必须按照备份时的顺序来,不可以乱序或跳过。

#对第一次的增量备份进行预处理
mkdir -p /data/backups/inc1
cd /data/backups/inc1
cat /target_backup/inc.dat | xbstream -x -v -p 32
xtrabackup --decompress --parallel 16 --target-dir=.

#对第二次的增量备份进行预处理
mkdir -p /data/backups/inc2
cd /data/backups/inc2
cat /target_backup/inc_2.dat | xbstream -x -v -p 32
xtrabackup --decompress --parallel 16 --target-dir=.

#对全量备份进行预处理
mkdir -p /data/backups/base
cd /data/backups/base
cat /target_backup/backup.dat | xbstream -x -v -p 32
xtrabackup --decompress --parallel 16 --target-dir=.
xtrabackup --prepare --apply-log-only --target-dir=./

#合并第一次增量备份
xtrabackup --prepare \
--apply-log-only \
--target-dir=./ \
--incremental-dir=/data/backups/inc1

#合并第二次增量备份
xtrabackup --prepare \
--target-dir=./ \
--incremental-dir=/data/backups/inc2

#将备份文件从./拷贝到work_dir目录
mkdir -p /work_dir
xtrabackup --copy-back \
--datadir=/work_dir/ \
--target-dir=./

在这里插入图片描述

(对全量备份进行预处理)

合并第一次增量备份

(合并第一次增量备份)

在这里插入图片描述

(合并第二次增量备份)

至此通过xtrbackup已经完成了MySQL的增量备份及恢复。

xtrabackup带来的限制:

必须在MySQL所在的机器执行备份任务,继而引发如下问题:

1、备份文件通常需要落地本地磁盘,本地磁盘需要为备份文件预留空间。

2、为了安全,备份需要异地存储,需要二次转移。

借助stream的伪远程备份

如上所示,通过设置–stream选项,xtrabackup可以将备份出来的文件以xbstream格式进行打包,文件不落地,直接输出到stdout。在配合其他的工具(socat),即可实现伪远程备份。

在这里插入图片描述

(伪远程备份)

当然上述方式还是比较原始。如果进一步自动化,可以借助更完善的工具。

比如 https://github.com/openzee/percona-xtrabackup,该版本

xtrabackup添加了http-server模式,可在任意机器通过curl、wget发送GET请求,既可启动远程备份,并将备份文件下载到本地。

  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值