MySQL8.0之XtraBackup 增量恢复

Percona XtraBackup的工作原理:

1.XtraBackup复制InnoDB数据文件,这会导致内部不一致的数据,但是它会对文件执行崩溃恢复,以使其再次成为一个一致的可用数据库

2.这样做的可行性是因为InnoDB维护一个REDO日志,也称为事务日志。REDO日志包含了InnoDB数据每次更改的记录。当InnoDB启动时,REDO日志会检查数据文件和事务日志,并执行两个步骤。它将已提交的事务日志条目应用于数据文件,并对任何修改了数据但未提交的事务执行undo操作

3.Percona XtraBackup会在启动时记住日志序列号(LSN),然后复制数据文件。这需要一些时间来完成,如果文件正在改变,那么它会在不同的时间点反映数据库的状态。同时,Percona XtraBackup运行一个后台进程,用于监视事务日志文件,并从中复制更改。Percona XtraBackup需要持续这样做,因为事务日志是以循环方式写入的,并且可以在一段时间后重新使用。Percona XtraBackup开始执行后,需要复制每次数据文件更改对应的事务日志记录。

安装

1、安装percona依赖库:

yum install http://www.percona.com/downloads/percona-release/redhat/0.1-4/percona-release-0.1-4.noarch.rpm

2、测试依赖库是否安装成功:

yum list | grep percona

3、安装percona

yum install percona-xtrabackup-24

MySQL8.0之XtraBackup 增量恢复_第1张图片

解决方法:

yum update percona-release

yum update

4、安装完成。

 rpm -ql percona-xtrabackup-24

Xtrabackup 2.4.已经不支持MySQL 8.0的备份恢复,使用会报如下错误!

Error: MySQL 8.0 and Percona Server 8.0 are not supported by Percona Xtrabackup 2.4.x series. Please use Percona Xtrabackup 8.0.x for backups and restores.

在percona官方下载centos版本的rpm包,使用yum安装(示例):

yum -y localinstall percona-xtrabackup-80-8.0.1-2.alpha2.el7.x86_64.rpm

  yum install https://repo.percona.com/centos/7/RPMS/noarch/percona-release-0.1-8.noarch.rpm

xtrabackup --version  查看版本

安装percona-xtrabackup-80

yum -y install percona-xtrabackup-80-8.0.7-1.el7.x86_64.rpm

wget https://www.percona.com/downloads/Percona-XtraBackup-LATEST/Percona-XtraBackup-8.0-6/binary/redhat/6/x86_64/percona-xtrabackup-80-8.0.6-1.el6.x86_64.rpm

查看安装后结果,发现已经没有innobackupex命令

  rpm -ql percona-xtrabackup-80-8.0.7-1.el7.x86_64

1.全量备份和恢复

全量备份

在XtraBackup8概述

移除了innobackupex命令。

由于新的MySQL重做日志和数据字典格式,8.0版本只支持mysql8.0和percona8.0。

早于mysql8.0的版本需要使用xtrabackup2.4备份和恢复

--备份命令

xtrabackup --defaults-file=/home/mysql8.0.16/mysql/my.cnf  --socket=/tmp/mysql.sock --host='IP'  --user='USERNAME' --password='PWD' --port=3307  --backup  --target-dir=/home/zqdba/20200324backup/FULL-253databasem-mysql8.0.16-`date +%Y-%m-%d-%H-%M-%S`
 ...省略..

--查看备份

MySQL8.0之XtraBackup 增量恢复_第2张图片

备份时间长短根据数据库大小有关,在备份的期间可以随时取消,因为xtrabackup命令不会对数据库进行操作

全量恢复

--执行恢复命令

xtrabackup --prepare --target-dir=--target-dir=/home/zqdba/20200324backup/

xtrabackup --copy-back --target-dir=--target-dir=/home/zqdba/20200324backup/

...省略...

190802 16:33:41 [01]        ...done

190802 16:33:41 completed OK!

--对文件授权

chwon -R mysql.mysql /usr/local/mysql/data/*

Tips:

--copy-back命令表示将备份 复制 到datadir目录下,如果不想保留备份,可以使用--move-back命令,直接将备份 移动 到datadir目录下

2.增量备份

在进行增量备份之前,通过先进行一次全量备份。XtraBackup通过二进制方式在备份目录下写入xtrabackup_checkpoints文件。该文件其中一行会显示to_lsn,

该参数记录了数据库备份完成的LSN。全量备份命令:

方式一:

基于base的备份

xtrabackup --defaults-file=/home/mysql8.0.16/mysql/my.cnf  --socket=/tmp/mysql.sock --host='IP'  --user='USERNAME' --password='PWD' --port=3307  --backup  --target-dir=/home/zqdba/20200324backup/FULL-253databasem-mysql8.0.16-`date +%Y-%m-%d-%H-%M-%S`

xtrabackup_checkpoints的内容:

 cat xtrabackup_checkpoints
backup_type = full-backuped
from_lsn = 0
to_lsn = 19375978048
last_lsn = 19400733296
flushed_lsn = 0

在进行了全量备份后 ,我们可以通过 增量备份 的命令进行备份:

基于base的incr1备份

xtrabackup --defaults-file=/home/mysql8.0.16/mysql/my.cnf  --socket=/tmp/mysql.sock --host='192.168.11.253'  --user='aa' --password='aa' --port=3307  --backup  --target-dir=/home/zqdba/20200324backup/incr1 --incremental-basedir=/home/zqdba/20200324backup/FULL-253databasem-mysql8.0.16-2020-04-07-14-10-13/

注:--incremental-basedir这个目录下会自动读取xtrabackup_checkpoints里的FROM_LSN

xtrabackup_checkpoints的内容:

cat  xtrabackup_checkpoints

backup_type = incremental

from_lsn = 19957274

to_lsn = 19957304

last_lsn = 19957314

flushed_lsn = 0

MySQL8.0之XtraBackup 增量恢复_第3张图片

基于incr1的incr2备份

xtrabackup --defaults-file=/home/mysql8.0.16/mysql/my.cnf  --socket=/tmp/mysql.sock --host='192.168.11.253'  --user='aa' --password='aa' --port=3307  --backup  --target-dir=/home/zqdba/20200324backup/incr2 --incremental-basedir=/home/zqdba/20200324backup/incr1

xtrabackup_checkpoints的内容:

cat  incr2/xtrabackup_checkpoints

backup_type = incremental

from_lsn = 19957304

to_lsn = 19957364

last_lsn = 19957374

flushed_lsn = 0

结论:

假设周一是基于base的备份,周二是基于base的incr1备份,周三是基于incr1的incr2备份,在恢复数据库的时候,需要使用base,incr1,incr2三个备份都存在时,才能进行完整的恢复,每个备份的from_lsn都是基于上一个备份的to_lsn,所以缺一不可。

方式二:

基于base的备份

xtrabackup --defaults-file=/home/mysql8.0.16/mysql/my.cnf  --socket=/tmp/mysql.sock --host='IP'  --user='USERNAME' --password='PWD' --port=3307  --backup  --target-dir=/home/zqdba/20200324backup/FULL-253databasem-mysql8.0.16-`date +%Y-%m-%d-%H-%M-%S`

xtrabackup_checkpoints的内容:

 cat xtrabackup_checkpoints
backup_type = full-backuped
from_lsn = 0
to_lsn = 19375978048
last_lsn = 19400733296
flushed_lsn = 0

基于base的incr1备份

xtrabackup --defaults-file=/home/mysql8.0.16/mysql/my.cnf  --socket=/tmp/mysql.sock --host='192.168.11.253'  --user='aa' --password='aa' --port=3307  --backup  --target-dir=/home/zqdba/20200324backup/incr1 --incremental-basedir=/home/zqdba/20200324backup/FULL-253databasem-mysql8.0.16-2020-04-07-14-10-13/

xtrabackup_checkpoints的内容:

cat  incr1/xtrabackup_checkpoints

backup_type = incremental

from_lsn = 19957274

to_lsn = 19957304

last_lsn = 19957314

flushed_lsn = 0

基于base的incr2备份

xtrabackup --defaults-file=/home/mysql8.0.16/mysql/my.cnf  --socket=/tmp/mysql.sock --host='192.168.11.253'  --user='aa' --password='aa' --port=3307  --backup  --target-dir=/home/zqdba/20200324backup/incr2 --incremental-basedir=/home/zqdba/20200324backup/incr1

xtrabackup_checkpoints的内容:

cat /xtrabackup/incr2/xtrabackup_checkpoints

backup_type = incremental

from_lsn = 19957274

to_lsn = 19957394

last_lsn = 19957404

flushed_lsn = 0

结论:假设周一是基于base的备份,周二是基于base的incr1备份,周三是基于base的incr2备份,在恢复数据库的时候,需要使用base和incr1,incr2两个备份中的其中一个,才能进行完整的恢复,因为incr1和incr2的from_lsn都是基于base备份中的to_lsn,所以恢复数据库时,只需要base和任意一个基于base的增量备份。

3.增量备份恢复

增量备份和全量备份的--prepare执行的方式是不一样的。在全量备份中,可以通过两种操作保持数据库的一致性:已提交的事务将根据数据文件和日志文件进行重放操作,并回滚未提交的事务。在准备增量备份时,必须跳过未提交事务的回滚,因为在备份的过程中,可能存在进行中且未提交的事务,并且这些事务很可能在下一次的增量备份中才进行提交,所以必须使用--apply-log-only选项来防止回滚操作。

基于方式一的恢复:

3.1准备好备份片

 

MySQL8.0之XtraBackup 增量恢复_第4张图片

3.2执行恢复命令

xtrabackup --prepare --apply-log-only --target-dir=/home/zqdba/20200324backup/FULL-253databasem-mysql8.0.16-2020-04-07-14-10-13/

 xtrabackup --prepare --apply-log-only --target-dir=/home/zqdba/20200324backup/FULL-253databasem-mysql8.0.16-2020-04-07-14-10-13/  --incremental-dir=/home/zqdba/20200324backup/incr1

 xtrabackup --prepare --target-dir=/home/zqdba/20200324backup/FULL-253databasem-mysql8.0.16-2020-04-07-14-10-13/ --incremental-dir=/home/zqdba/20200324backup/incr2

 xtrabackup --copy-back --target-dir=/home/zqdba/20200324backup/FULL-253databasem-mysql8.0.16-2020-04-07-14-10-13/

3.3对data目录授权

chown -R mysql.mysql data/

基于方式二的恢复:

3.1准备好备份片

 

MySQL8.0之XtraBackup 增量恢复_第5张图片

3.2执行恢复命令

xtrabackup --prepare --apply-log-only --target-dir=/xtrabackup/base

xtrabackup --prepare --target-dir=/xtrabackup/base --incremental-dir=/xtrabackup/incr2

 xtrabackup --copy-back --target-dir=/xtrabackup/base/

 

xtrabackup --prepare --apply-log-only --target-dir=/home/zqdba/20200324backup/FULL-253databasem-mysql8.0.16-2020-04-07-14-10-13/

 xtrabackup --prepare  --target-dir=/home/zqdba/20200324backup/FULL-253databasem-mysql8.0.16-2020-04-07-14-10-13/  --incremental-dir=/home/zqdba/20200324backup/incr2

 xtrabackup --copy-back --target-dir=/home/zqdba/20200324backup/FULL-253databasem-mysql8.0.16-2020-04-07-14-10-13/

3.3对data目录授权

 chown -R mysql.mysql data/

Tips:

--apply-log-only命令应该用在所有增量备份(除最后一次增量备份) ,这就是为什么恢复脚本中,最后一次的命令不包含--apply-log-only。即使--apply-log-only在最后一次增量备份时被使用,备份仍将是一致的,但在这种情况下,数据库会执行回滚的操作。

4.压缩备份

xtrabackup --defaults-file=/home/mysql8.0.16/mysql/my.cnf  --socket=/tmp/mysql.sock --host='192.168.11.253'  --user='aa' --password='aa' --port=3307  --backup  --compress --target-dir=/home/zqdba/20200324backup/compress/FULL-253databasem-mysql8.0.16-`date +%Y-%m-%d-%H-%M-%S`

压缩和未压缩的对比

 du -h --max-depth=1

MySQL8.0之XtraBackup 增量恢复_第6张图片

压缩后的文件列表

MySQL8.0之XtraBackup 增量恢复_第7张图片

 

如果想要加速备份的速度,可以采用--compress-threads命令

xtrabackup --defaults-file=/home/mysql8.0.16/mysql/my.cnf  --socket=/tmp/mysql.sock --host='192.168.11.253'  --user='aa' --password='aaa' --port=3307  --backup  --compress --compress-threads=4 --target-dir=/home/zqdba/20200324backup/compress/FULL-253databasem-mysql8.0.16-`date +%Y-%m-%d-%H-%M-%S`

MySQL8.0之XtraBackup 增量恢复_第8张图片

解压缩

xtrabackup --decompress --target-dir=/home/zqdba/20200324backup/compress/FULL-253databasem-mysql8.0.16-2020-04-07-14-45-17

MySQL8.0之XtraBackup 增量恢复_第9张图片

注:有很多.qp结尾的压缩文件,需要安装qpress工具,因为innobackupex在解压时默认使用该工具
 安装:  yum install qpress

MySQL8.0之XtraBackup 增量恢复_第10张图片

执行如下命令,恢复解压好的备份文件。

innobackupex --defaults-file=/home/mysql/data/backup-my.cnf --apply-log /home/mysql/data

注:为避免版本问题,需修改backup-my.cnf参数,具体操作步骤如下。

  1. 执行如下命令,以文本方式编辑backup-my.cnf文件。

    vi /home/mysql/data/backup-my.cnf

 
2、自建数据库不支持如下参数,需要注释掉。

#innodb_log_checksum_algorithm
#innodb_fast_checksum
#innodb_log_block_size
#innodb_doublewrite_file
#rds_encrypt_data
#innodb_encrypt_algorithm
#redo_log_version
#master_key_id
说明

如果本地使用的是MyISAM引擎,和阿里云的InnoDB不兼容,需要多注释掉如下参数并增加skip-grant-tables参数:

#innodb_log_checksum_algorithm=strict_crc32
#redo_log_version=1
skip-grant-tables

如果本地使用的是MyIAM引擎,且对系统表进行操作时报错(存储引擎相关),请按如下操作进行存储引擎的转换:

alter engine <表名> engine=myisam;

 

执行如下命令,修改文件属主,并确定文件所属为MySQL用户。

chown -R mysql:mysql /home/mysql/data

执行如下命令,启动MySQL进程。

mysqld --defaults-file=/home/mysql/data/backup-my.cnf --user=mysql --datadir=/home/mysql/data &

 

 

 

Tips:

--parallel命令可以配合--decompress一起使用

正常,查看目录文件,会发现压缩文件和解压文件共存,如果不想保留原压缩文件,可以使用 --remove-original 命令

 

不保留原压缩文件,使用 --remove-original

 xtrabackup --decompress  --remove-original  --target-dir=/home/zqdba/20200324backup/compress/FULL-253databasem-mysql8.0.16-2020-04-07-14-40-42/

查看目录文件

 

MySQL8.0之XtraBackup 增量恢复_第11张图片

5.流式备份(Streaming Backups)

Percona XtraBackup支持xbstream流模式将备份发送到STDOUT,而不是将文件复制到备份目录。这允许您使用其他程序过滤备份的输出,从而为备份的存储提供更大的灵活性。例如,通过输出管道的方式可以实现压缩且备份可以自动加密。

使用xbstream作为流选项,可以并行复制和压缩备份,这可以显着加快备份过程。 如果备份既压缩又加密,则需要先解密才能解压缩。

--并行压缩且并行复制备份

  xtrabackup --backup --socket=/tmp/mysql.sock --compress --compress-threads=8 --stream=xbstream --parallel=4 --target-dir=/xtrabackup/ >backup.xbstream

--查看结果

 ll backup.xbstream

-rw-r--r-- 1 root root 3148078 Aug  6 15:01 backup.xbstream

恢复时必须先解压xbstream格式,再解压qb

--解压xbstream

 xbstream -x < backup.xbstream -C /xtrabackup/

--查看内容

[root@oracle xtrabackup]# ll

total 2920

-rw-r----- 1 root root     453 Aug  6 15:03 backup-my.cnf.qp

-rw-r----- 1 root root     183 Aug  6 15:03 binlog.000035.qp

-rw-r----- 1 root root      93 Aug  6 15:03 binlog.index.qp

drwxr-x--- 2 root root    4096 Aug  6 15:03 company

-rw-r----- 1 root root     945 Aug  6 15:03 ib_buffer_pool.qp

-rw-r----- 1 root root  315187 Aug  6 15:03 ibdata1.qp

drwxr-x--- 2 root root    4096 Aug  6 15:03 mysql

-rw-r----- 1 root root 2187997 Aug  6 15:03 mysql.ibd.qp

drwxr-x--- 2 root root    4096 Aug  6 15:03 performance_schema

drwxr-x--- 2 root root    4096 Aug  6 15:03 sys

-rw-r----- 1 root root  212804 Aug  6 15:03 undo_001.qp

-rw-r----- 1 root root  215761 Aug  6 15:03 undo_002.qp

-rw-r----- 1 root root     105 Aug  6 15:03 xtrabackup_binlog_info.qp

-rw-r----- 1 root root      95 Aug  6 15:03 xtrabackup_checkpoints

-rw-r----- 1 root root     498 Aug  6 15:03 xtrabackup_info.qp

-rw-r----- 1 root root     333 Aug  6 15:03 xtrabackup_logfile.qp

-rw-r----- 1 root root     234 Aug  6 15:03 xtrabackup_tablespaces.qp

--解压qp

 xtrabackup --decompress --remove-original --target-dir=/xtrabackup/

--查看内容

[root@oracle xtrabackup]# ll

total 56372

-rw-r--r-- 1 root root      476 Aug  6 15:04 backup-my.cnf

-rw-r--r-- 1 root root      155 Aug  6 15:04 binlog.000035

-rw-r--r-- 1 root root       16 Aug  6 15:04 binlog.index

drwxr-x--- 2 root root     4096 Aug  6 15:04 company

-rw-r--r-- 1 root root     3458 Aug  6 15:04 ib_buffer_pool

-rw-r--r-- 1 root root 12582912 Aug  6 15:04 ibdata1

drwxr-x--- 2 root root     4096 Aug  6 15:04 mysql

-rw-r--r-- 1 root root 24117248 Aug  6 15:04 mysql.ibd

drwxr-x--- 2 root root     4096 Aug  6 15:04 performance_schema

drwxr-x--- 2 root root     4096 Aug  6 15:04 sys

-rw-r--r-- 1 root root 10485760 Aug  6 15:04 undo_001

-rw-r--r-- 1 root root 10485760 Aug  6 15:04 undo_002

-rw-r--r-- 1 root root       18 Aug  6 15:04 xtrabackup_binlog_info

-rw-r----- 1 root root       95 Aug  6 15:03 xtrabackup_checkpoints

-rw-r--r-- 1 root root      544 Aug  6 15:04 xtrabackup_info

-rw-r--r-- 1 root root     2560 Aug  6 15:04 xtrabackup_logfile

-rw-r--r-- 1 root root      262 Aug  6 15:04 xtrabackup_tablespaces

6.加密备份(Encrypting Backups)

Percona XtraBackup支持使用xbstream选项加密和解密本地和流式备份,从而增加了另一层保护。使用GnuPG的libgcrypt库实现加密

加密

--encrypt-key选项

通过ssl生成密钥

 openssl rand -base64 24

LymjcKljN4xxtPUe3GkF/4mNzj3x4y9D

加密时指定密钥

xtrabackup --backup --encrypt=AES256 --encrypt-key="LymjcKljN4xxtPUe3GkF/4mNzj3x4y9D" --target-dir=/xtrabackup/ --socket=/tmp/mysql.sock

查看备份的文件

 ll

total 56468

-rw-r----- 1 root root      568 Aug  6 16:21 backup-my.cnf.xbcrypt

-rw-r----- 1 root root      247 Aug  6 16:21 binlog.000036.xbcrypt

-rw-r----- 1 root root      108 Aug  6 16:21 binlog.index.xbcrypt

drwxr-x--- 2 root root     4096 Aug  6 16:21 company

-rw-r----- 1 root root     3550 Aug  6 16:21 ib_buffer_pool.xbcrypt

-rw-r----- 1 root root 12600576 Aug  6 16:21 ibdata1.xbcrypt

drwxr-x--- 2 root root     4096 Aug  6 16:21 mysql

-rw-r----- 1 root root 24151104 Aug  6 16:21 mysql.ibd.xbcrypt

drwxr-x--- 2 root root     4096 Aug  6 16:21 performance_schema

drwxr-x--- 2 root root     4096 Aug  6 16:21 sys

-rw-r----- 1 root root 10500480 Aug  6 16:21 undo_001.xbcrypt

-rw-r----- 1 root root 10500480 Aug  6 16:21 undo_002.xbcrypt

-rw-r----- 1 root root      110 Aug  6 16:21 xtrabackup_binlog_info.xbcrypt

-rw-r----- 1 root root       95 Aug  6 16:21 xtrabackup_checkpoints

-rw-r----- 1 root root      595 Aug  6 16:21 xtrabackup_info.xbcrypt

-rw-r----- 1 root root     2744 Aug  6 16:21 xtrabackup_logfile.xbcrypt

-rw-r----- 1 root root      354 Aug  6 16:21 xtrabackup_tablespaces.xbcrypt

Tips:

通过使用--encrypt-threads选项,可以指定多个线程并行使用加密。选项--encrypt-chunk-size可用于指定每个加密线程的工作加密缓冲区的大小(以字节为单位)(默认为64K)。

解密

--decrypt选项

执行解密,如果不想保留原压缩文件,可以使用 --remove-original 命令

xtrabackup --remove-original  --decrypt=AES256 --encrypt-key="LymjcKljN4xxtPUe3GkF/4mNzj3x4y9D" --target-dir=/xtrabackup/

查看备份文件

 ll

total 56380

-rw-r--r-- 1 root root      476 Aug  6 16:25 backup-my.cnf

-rw-r--r-- 1 root root      155 Aug  6 16:25 binlog.000036

-rw-r--r-- 1 root root       16 Aug  6 16:25 binlog.index

drwxr-x--- 2 root root     4096 Aug  6 16:25 company

-rw-r--r-- 1 root root     3458 Aug  6 16:25 ib_buffer_pool

-rw-r--r-- 1 root root 12582912 Aug  6 16:25 ibdata1

drwxr-x--- 2 root root     4096 Aug  6 16:25 mysql

-rw-r--r-- 1 root root 24117248 Aug  6 16:25 mysql.ibd

drwxr-x--- 2 root root    12288 Aug  6 16:25 performance_schema

drwxr-x--- 2 root root     4096 Aug  6 16:25 sys

-rw-r--r-- 1 root root 10485760 Aug  6 16:25 undo_001

-rw-r--r-- 1 root root 10485760 Aug  6 16:25 undo_002

-rw-r--r-- 1 root root       18 Aug  6 16:25 xtrabackup_binlog_info

-rw-r----- 1 root root       95 Aug  6 16:21 xtrabackup_checkpoints

-rw-r--r-- 1 root root      503 Aug  6 16:25 xtrabackup_info

-rw-r--r-- 1 root root     2560 Aug  6 16:25 xtrabackup_logfile

-rw-r--r-- 1 root root      262 Aug  6 16:25 xtrabackup_tablespaces

Tips:

--parallel可以与--decrypt选项一起使用来同时解密多个文件。

6.流式远程备份(Streaming Backups)

   使用xbstream备份
 xtrabackup  --defaults-file=/home/mysql8.0.16/mysql/my.cnf --socket=/tmp/mysql.sock --user=aa --password='aa' --port=3307  --host=192.168.11.253  --no-timestamp --parallel=4 --throttle=2000  --compress-threads=8 --backup --stream=xbstream | gzip  - > /home/zqdba/dbbak/full/full.xbstream.gz


 xtrabackup  --defaults-file=/home/mysql8.0.16/mysql/my.cnf --socket=/tmp/mysql.sock --user=aa --password='aa' --port=3307  --host=192.168.11.253  --no-timestamp --parallel=4 --throttle=2000  --compress-threads=8 --backup  --stream=xbstream|gzip |ssh 192.168.8.3   "cat - > /home/backup/mysql/test/FULL-253database-`date +%Y-%m-%d-%H-%M-%S`.xbstream.gz"
 
   
   --extra-lsndir=/backup/chkpoint
 解压
 gzip -d full.xbstream.gz
 xbstream -x  
 --执行恢复命令
 xtrabackup --defaults-file=/usr/local/mysql/my.cnf   --prepare --target-dir=/home/zqdba/dbbak/full/
 xtrabackup --defaults-file=/usr/local/mysql/my.cnf   --copy-back --target-dir=/home/zqdba/dbbak/full/
 
流备份的异机恢复
###备份到异机
# innobackupex --stream=xbstream --extra-lsndir=/backup/chkpoint /tmp | [email protected] "xbstream -x -C /backup/stream"
# innobackupex --incremental --extra-lsndir=/backup/chkpoint --incremental-basedir=/backup/chkpoint --stream=xbstream > /tmp | ssh [email protected] "xbstream -x -C /backup/stream_inc"


 xtrabackup  --defaults-file=/home/mysql8.0.16/mysql/my.cnf --socket=/tmp/mysql.sock --user=aa --password='aa' --port=3307  --host=192.168.11.253  --no-timestamp   --parallel=4 --throttle=2000  --compress-threads=8 --backup   --stream=xbstream  |ssh 192.168.8.3   "xbstream -x -C /home/backup/mysql/test"
 
 xtrabackup  --defaults-file=/home/mysql8.0.16/mysql/my.cnf --socket=/tmp/mysql.sock --user=aa --password='aa' --port=3307  --host=192.168.11.253  --parallel=4  --throttle=2000  --compress-threads=8   --incremental=| ssh 192.168.8.3 cd /home/backup/mysql/test/xtrabackup_checkpoints  --stream=xbstream   |ssh 192.168.8.3   "xbstream -x -C /home/backup/mysql/test/inc"

  xtrabackup  --defaults-file=/home/mysql8.0.16/mysql/my.cnf --socket=/tmp/mysql.sock --user=aa --password='aa' --port=3307  --host=192.168.11.253  --parallel=4  --throttle=2000  --compress-threads=8 --extra-lsndir=| ssh 192.168.8.3 cd /home/backup/mysql/test/xtrabackup_checkpoints   --incremental   --stream=xbstream   |ssh 192.168.8.3   "xbstream -x -C /home/backup/mysql/test/inc"

 

###异机恢复,copy-back及后续步骤省略
# innobackupex --apply-log --redo-only /backup/stream
# innobackupex --apply-log /backup/stream --incremental-dir=/backup/stream_inc

 

备份shell脚本
 
#!/bin/bash

name=root
host=192.168.0.1
DATE=`date +"%Y%m%d"`
allbackup="/home/dbback/hotbackup/"

###所有集合顺序上下一一对应吗,即vpwd[0]、vchk[0]、vsocket[0]、vport[0]代表一个数据库实例
#root用户密码集
vpwd=("")

#配置文件集
vchk=("/data/mysql-5.5.43/etc/my.cnf")

#socket集
vsocket=("/tmp/mysql.sock")

#设置端口集
vport=("3306")
 
###获取端口个数
k=${#vport[*]}

if [ -d $allbackup ];
then
        echo "完全备份目录存在"
else
    echo "完全备份目录不存在,开始创建......."
    /bin/mkdir -p $allbackup
fi

###for循环,循环备份不同端口数据库
for ((l=0;l<$k;++l))

do
 
    if [ -d $allbackup/$DATE/$host/${vport[$l]} ];
    then
            echo "完全备份目录存在"
    else
            echo "完全备份目录不存在,开始创建......."
        /bin/mkdir -p $allbackup/$DATE/$host/${vport[$l]}
#fi
 
    find $allbackup -type d  -mtime +1 -exec rm -rf {} \;

    cd $allbackup/$DATE/$host/${vport[$l]}


    innobackupex --defaults-file=${vchk[$l]} --ibbackup=xtrabackup --socket=${vsocket[$l]}  --slave-info --user=root  --password=${vpwd[$l]} --no-timestamp --parallel=4 --throttle=300 --compress --compress-threads=8  ./ 2>bak.$DATE.log

    result=`cat bak.$DATE.log | grep "completed OK\!" | grep -v prints`

    coun=1

        if [[ -z $result ]];
        then
            if [[ $coun -lt 2 ]];
            then
                rm -rf $allbackup/$DATE/$host/${vport[$l]}

                /bin/mkdir -p $allbackup/$DATE/$host/${vport[$l]}

                cd $allbackup/$DATE/$host/${vport[$l]}

                innobackupex --defaults-file=${vchk[$l]} --ibbackup=xtrabackup --socket=${vsocket[$l]}  --slave-info --user=root  --password=${vpwd[$l]} --no-timestamp --parallel=4 --throttle=300 --compress --compress-threads=8  ./ 2>bak.$DATE.log

                       coun=`expr $coun + 1`;

                echo $coun
            fi
        else
            rsync -zavP --password-file=/etc/rsync.pass --bwlimit=30000 $allbackup/$DATE [email protected]::KAPROBAK/DBBAK
            echo "备份文件推送成功!"
        fi

    fi
done

你可能感兴趣的:(备份与恢复)