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
解决方法:
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`
...省略..
--查看备份
备份时间长短根据数据库大小有关,在备份的期间可以随时取消,因为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
基于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准备好备份片
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准备好备份片
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
压缩后的文件列表
如果想要加速备份的速度,可以采用--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`
解压缩
xtrabackup --decompress --target-dir=/home/zqdba/20200324backup/compress/FULL-253databasem-mysql8.0.16-2020-04-07-14-45-17
注:有很多.qp结尾的压缩文件,需要安装qpress工具,因为innobackupex在解压时默认使用该工具
安装: yum install qpress
执行如下命令,恢复解压好的备份文件。
innobackupex --defaults-file=/home/mysql/data/backup-my.cnf --apply-log /home/mysql/data
注:为避免版本问题,需修改backup-my.cnf参数,具体操作步骤如下。
执行如下命令,以文本方式编辑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/
查看目录文件
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