安装

tar xvf percona-xtrabackup-8.0.25-17-Linux-x86_64.glibc2.17.tar.gz -C /usr/local

cd /usr/local/percona-xtrabackup-8.0.25-17-Linux-x86_64.glibc2.17/

yum -install perl-Digest-MD5 perl-DBD-MySQL libev -y

ls bin
xbcloud xbcloud_osenv xbcrypt xbstream xtrabackup

备份流程

1. start backup,Executing LOCK INSTANCE FOR BACKUP.
2. 创建redo log 拷贝线程,从最新的检查点开始拷贝redo log.
3. 创建数据文件拷贝线程,拷贝ibdata,undo tablespaces 和ibd结尾的文件
以下场景会加FTWLR
(1)当使用 --slave-info 启动 xtrabackup 时,MySQL 8.0 中仍然需要 FTWRL
(2)备份实例中存在MyISAM表.
4. 拷贝非ibd文件.
5. 执行 FLUSH NO_WRITE_TO_BINLOG BINARY LOGS,切换binlog
6. Selecting LSN and binary log position from perfomance_schema.log_status,获取gtid_executed和binlog的位置点信息
7. 拷贝当前的binlog
8. 如果设置了slave-info ,则会执行show slave status ,结果记录在xtrabackup_binlog_info中
9. 将第6步的log_status的输出记录在xtrabackup_binlog_info中
10. 停止拷贝redo log线程
11. 释放备份锁,如果加了全局锁,还会释放全局读锁
12. 拷贝ib_buffer_pool和ib_lru_dump文件
13. 生产配置文件backup-my.cnf
14. 将备份的信息记录在xtrabackup_info文件中

全量备份

设置软链

ln -s /usr/local/percona-xtrabackup-8.0.25-17-Linux-x86_64.glibc2.17/bin /usr/bin/xtrabackup

xtrabackup --user=super --password=super --backup --parallel=10 --target-dir=/data/backup/full

xtrabackup --defaults-file=/etc/my3308.cnf --user=cjr --password=cjr --host=116.63.145.178 --port=3308 --backup --parallel=10 --target-dir=/data/backup/full1

(如果主机上有多个实例,需要制定配置文件)

xtrabackup --prepare --use-memory=2G --target-dir=/data/backup/full1

xtrabackup --defaults-file=/etc/my3308.cnf --copy-back --parallel=10 --target-dir=/data/backup/full1

修改数据目录的属主和属组权限chown mysql.mysq -R /data

启动数据库

xtrabackup_binlog_info

备份结束时的一致性位点

xtrabackup_checkpoints
backup_type = full-backuped
from_lsn = 0 上一次备份完成时的LSN,0代表全备,增量备份则代表上一次的to_lsn
to_lsn = 22519104 备份完成时最近的一个检查点LSN
last_lsn = 22527776 停止拷贝redo log 的lsn
flushed_lsn = 22519104

xtrabackup_logfile

保存redo log

xtrabackup --prepare --use-memory=2G --target-dir=/daba/backup/full

生产redo日志文件和临时表空间文件ibtmp1

xtrabackup --defaults-file=/etc/my3308.cnf --copy-back --parallel=10 --target-dir=/data/backup/full

–copy-back表示将备份目录中的文件拷贝到数据目录下

增量备份

xtrabackup --defaults-file=/etc/my3308.cnf --user=cjr --password=cjr --host=116.63.145.178 --port=3308 --backup --parallel=10 --target-dir=/data/backup/full1 (如果主机上有多个实例,需要制定配置文件)

xtrabackup --defaults-file=/etc/my3308.cnf --user=cjr --password=cjr --host=116.63.145.178 --port=3308 --backup --parallel=10 --target-dir=/data/backup/inc1 --incremental-basedir=/data/backup/full1

xtrabackup --defaults-file=/etc/my3308.cnf --user=cjr --password=cjr --host=116.63.145.178 --port=3308 --backup --parallel=10 --target-dir=/data/backup/inc2 --incremental-basedir=/data/backup/inc1

恢复

xtrabackup --prepare --apply-log-only --target-dir=/data/backup/full1

xtrabackup --prepare --apply-log-only --target-dir=/data/backup/full1 --incremental-dir=/data/backup/inc1

xtrabackup --prepare --target-dir=/data/backup/full1 --incremental-dir=/data/backup/inc2

xtrabackup --defaults-file=/etc/my3308.cnf --copy-back --parallel=10 --target-dir=/data/backup/full1

页面追踪进行增量备份

INSTALL COMPONENT “file://component_mysqlbackup”;

mysql> select count(*) from mysql.component where component_urn=‘file://component_mysqlbackup’;

xtrabackup --defaults-file=/etc/my3308.cnf --user=cjr --password=cjr --host=116.63.145.178 --port=3308 --backup --parallel=10 --target-dir=/data/backup/fullc --page-tracking

xtrabackup --defaults-file=/etc/my3308.cnf --user=cjr --password=cjr --host=116.63.145.178 --port=3308 --backup --parallel=10 --target-dir=/data/backup/incc --incremental-basedir=/data/backup/fullc --page-tracking

压缩备份

–compress

–decompress (prepare之前解压)

指定库表备份

xtrabackup --defaults-file=/etc/my3308.cnf --user=cjr --password=cjr --host=116.63.145.178 --port=3308 --backup --parallel=10 --target-dir=/data/backup/tables --tables=‘^world[.].*’

xtrabackup --defaults-file=/etc/my3308.cnf --user=cjr --password=cjr --host=116.63.145.178 --port=3308 --backup --parallel=10 --target-dir=/data/backup/tables1 --tables=‘^world[.]city$’

xtrabackup --defaults-file=/etc/my3308.cnf --user=cjr --password=cjr --host=116.63.145.178 --port=3308 --backup --parallel=10 --target-dir=/data/backup/tables2 --tables-file=/tmp/tables.txt

tables.txt(必须是database.table不支持正则匹配)

db1.t1

db2.t2

–tables-exclude跳过备份

–databases支持库也支持表备份(–database=‘db1.t1 db2’)

–databases-exclude

–dtabases-file

基于库表的备份不会备份mysql、performance_schema和sys库

xtrabackup2.4中即使只备份一张表也会加全局读锁,可以加no-lock参数禁用它

备份恢复一张表

1.备份city表

xtrabackup --defaults-file=/etc/my3308.cnf --user=cjr --password=cjr --host=116.63.145.178 --port=3308 --backup --parallel=10 --target-dir=/data/backup/tables1 --tables=‘^world[.]city$’

2.进行prepare

xtrabackup --prepare --export --target-dir=/data/backup/tables1

–export会将普通的表空间导出为可传输表空间

3.在目标实例中创建一张空表,表名和表结构要与导入的表一致

4.目标表中discard表空间

alter table world.ctiy discard tablespace;

5.将export导出的文件拷贝到目标实例的库的目录下,修改文件属主和属组

cp * /data/mysql/3308/data/world/

chown mysql.mysql -R /data/mysql/3308/data/world/

6.目标实例中导入表空间

alter table world.city import tablespace;

7.验证

select count(*) from world.city;

表空间传输直接使用的话,需要对目标表执行flush table t1 for export ,这段期间内目标表是不可用的。

对于在线业务,不可接受,可以选用xtrabackup这种方式。

流式备份

xtrabackup --defaults-file=/etc/my3308.cnf --user=cjr --password=cjr --host=116.63.145.178 --port=3308 --backup --stream=xbstream --parallel=10 >/data/backup/backup.xbstream

xbstream -x -p 10 -C /data/backup/extract < /data/backup/backup.xbstream

-x表示解压 -p指定并行度 -C指定解压目录

xtrabackup --prepare --target-dir=/data/backup/extract/

xtrabackup --defaults-file=/etc/my3308.cnf --copy-back --parallel=10 --target-dir=data/backup/extract/

(1)流式备份+压缩

xtrabackup --defaults-file=/etc/my3308.cnf --user=cjr --password=cjr --host=116.63.145.178 --port=3308 --backup --stream=xbstream --parallel=10 |lz4 >full.lz4

lz4 -d full.lz4 |xbstream -x -p 10 -C /data/backup/extract

(2)备份到远程服务器

xtrabackup --defaults-file=/etc/my3308.cnf --user=cjr --password=cjr --host=116.63.145.178 --port=3308 --backup --stream=xbstream --parallel=10 |lz4 |sshpass -p 123456 ssh -o StrictHostKeyChecking=no mysql@10.1.1.1 “cat - >/data/full.lz4”

xtrabackup --defaults-file=/etc/my3308.cnf --user=cjr --password=cjr --host=116.63.145.178 --port=3308 --backup --stream=xbstream --parallel=10 |lz4 |sshpass -p 123456 ssh -o StrictHostKeyChecking=no mysql@10.1.1.1 “cat -|lz4 -d|xbstream -x -p 10 -C /data/backup/extract”

加密备份

生成一个密钥

openssl rand -base64 24
4Bl2tkzWkkyEK8fsWiOs447SeMpOITp3

echo -n “4Bl2tkzWkkyEK8fsWiOs447SeMpOITp3” >/data/backup/keyfile

加密备份

xtrabackup --defaults-file=/etc/my3308.cnf --user=cjr --password=cjr --host=116.63.145.178 --port=3308 --backup --parallel=10 --target-dir=/data/backup/encrypt1 --encrypt-key-file=/data/backup/keyfile --encrypt=AES256

prepare之前解压备份集

xtrabackup --decrypt=AES256 --target-dir=/data/backup/encrypt1 --encrypt-key-file=/data/backup/keyfile

prepare和恢复

xtrabackup --prepare --target-dir=/data/backup/encrypt1

xtrabackup --defaults-file=/etc/my3308.cnf --copy-back --parallel=10 --target-dir=/data/backup/encrypt1