安装
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