Percona XtraBackup工具介绍

Percona XtraBackup是世界上唯一开源、免费的MySQL热备份软件,可为InnoDB和XtraDB数据库执行非阻塞备份。Percona XtraBackup特点如下所示:

1、在不暂停数据库的情况下创建热InnoDB备份。
2、对MySQL进行增量备份。
3、将压缩的MySQL备份流式传输到另一台服务器。
4、在线在MySQL服务器之间移动表。
5、轻松创建新的MySQL复制副本。
6、不增加服务器负载的情况下备份MySQL。
7、Percona XtraBackup根据每秒的IO操作数进行节流。
8、Percona XtraBackup跳过二级索引页面并在准备紧凑备份时重新创建它们。
9、Percona XtraBackup甚至可以从完整备份中导出单个表,无论InnoDB版本如何。
10、FLUSH TABLES WITH READ LOCK备份锁是Percona Server中可用的轻量级替代品。XtraBackup使用它们自动复制非InnoDB数据,以避免阻塞修改InnoDB表的DML查询。

安装Percona XtraBackup

官网https://www.percona.com/downloads

操作系统MySQL版本XtraBackup版本
Centos78.0.3380-8.0.4

使用yum仓库安装

wget https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-8.0.4/binary/redhat/7/x86_64/percona-xtrabackup-80-8.0.4-1.el7.x86_64.rpm

案例1完全备份

创建一个备份用的目录

mkdir -p /xtarbackup/full

完全备份
innobackupex --user=root --password='数据库密码' /xtarbackup/full

案例1完全备份恢复

1.停止数据库
2.清理环境

3.重演回滚--->恢复数据

innobackex --apply-log /xtarbackup/full/备份后的文件名
innobackex --copy-back /xtarbackup/full/备份后的文件名

4.修改权限
5.启动数据库

案例2增量备份

1.先创建一个数据库,创建一个表,插入一个值做记录

create database testdb;

create table testdb.t1(id int);

insert into testdb.t1 values(1);

Ctrl+z //暂停数据库

2.完整备份:周一

innobackupex --user=root --password='数据库密码' /xtarbackup

3.增量备份:周二-----周六

fg //恢复数据库

insert into testdb.t1 values(2); //插入一个值做记录

Crtl+z

完整备份

innobackupex --user=root --password='数据库密码' \
> incremental /xtarbackup \
> incremental-basedir=/xtarbackup/周一/

fg //恢复数据库

insert into testdb.t1 values(3); //插入一个值做记录

Crtl+z

innobackupex --user=root --password='数据库密码' \
> incremental /xtarbackup \
> incremental-basedir=/xtarbackup/周二/

fg //恢复数据库

insert into testdb.t1 values(4); //插入一个值做记录

Crtl+z

innobackupex --user=root --password='数据库密码' \
> incremental /xtarbackup \
> incremental-basedir=/xtarbackup/周三/

fg //恢复数据库

insert into testdb.t1 values(5); //插入一个值做记录

Crtl+z

innobackupex --user=root --password='数据库密码' \
> incremental /xtarbackup \
> incremental-basedir=/xtarbackup/周四/

案例2增量备份恢复

4.清理数据库数据

rm -rf /var/lib/mysql/*

5.依次重演回滚redo log

周一:full
innobackupex --apply-log --redo-only /xtarbackup/周一

周二------周四
innobackupex --apply-log --redo-only /xtarbackup/周一/ --incremental-dir=/xtarbackup/周二
innobackupex --apply-log --redo-only /xtarbackup/周一/ --incremental-dir=/xtarbackup/周三
innobackupex --apply-log --redo-only /xtarbackup/周一/ --incremental-dir=/xtarbackup/周四

6.恢复数据

cp -rf /xtarbackup/周一/* /var/lib/mysql/
chown -R mysql.mysql /var/lib/mysql
systemctl start mysqld

案例3差异备份

1.先创建一个数据库,创建一个表,插入一个值做记录

create database testdb;

create table testdb.t1(id int);

insert into testdb.t1 values(1);

Ctrl+z //暂停数据库

2.完整备份:周一

innobackupex --user=root --password='数据库密码' /xtarbackup

3.增量备份:周二-----周六

fg //恢复数据库

insert into testdb.t1 values(2); //插入一个值做记录

Crtl+z

完整备份

innobackupex --user=root --password='数据库密码' \
> incremental /xtarbackup \
> incremental-basedir=/xtarbackup/周一/

fg //恢复数据库

insert into testdb.t1 values(3); //插入一个值做记录

Crtl+z

innobackupex --user=root --password='数据库密码' \
> incremental /xtarbackup \
> incremental-basedir=/xtarbackup/周一/

fg //恢复数据库

insert into testdb.t1 values(4); //插入一个值做记录

Crtl+z

innobackupex --user=root --password='数据库密码' \
> incremental /xtarbackup \
> incremental-basedir=/xtarbackup/周一/

fg //恢复数据库

insert into testdb.t1 values(5); //插入一个值做记录

Crtl+z

innobackupex --user=root --password='数据库密码' \
> incremental /xtarbackup \
> incremental-basedir=/xtarbackup/周一/

案例3差异备份恢复

1.停止数据库
2.清理环境
3.重演回滚redo log(周一,某次差异)--->恢复数据
4.修改权限
5.启动数据库
6.binlog恢复

1.恢复全量的redo log
innobackupex --apply-log --redo-only /xtarbackup/周一/

2.恢复差异的redo log
innobackupex --apply-log --redo-only /xtarbackup/周一/ --incremental-dir=/xtarbackup/某个差异备份

3.复制数据文件(cp,rsync),修改权限

4.启动MySQL

5.通过binlog增量恢复