Xtrabackup 实操(mysql 热备系列三)

Xtrabackup 实操

网上太多错误文章,再看了官网,薅掉了几根头发之后,终于理清思路。为了自己和小伙伴们不踩坑,由此记录模拟实操,话不多说,开干!

​ Xtrabackup 作为mysql备份工具,在单机情况下需要停止mysql,来恢复数据。在主从等以及集群模式下,可以实现不停主库(不锁表)进行热备。

一、环境

mysql: 8.0.36

主:10.128.0.3

从:10.128.0.4

二、全量数据恢复

实操模拟准备:
1.创建一个目录用于存放备份文件:/home/admin/backup/
mkdir /home/admin/backup/ -p


2.创建数据库并向数据库的表中添加两条新数据
create database xtra;
use xtra;
create table test1(id int);
insert into test1 values(1),(2),(3);
create table test2(id int);
insert into test2 values(1),(2),(3);

	
3.全量备份:xtrabackup --backup -u用户名 -p --target-dir=保存路径
xtrabackup --backup -uroot -p`cat /root/mysql` --target-dir=/home/admin/backup/	


4.准备基本备份并停止数据库
xtrabackup --prepare --target-dir=/home/admin/backup/
systemctl stop mysqld


5.这时,再删除数据目录(database=/var/lib/mysql/data)
rm -rf /var/lib/mysql/data /var/lib/mysql/log


6.恢复数据库并重启数据库
xtrabackup --copy-back --target-dir=/home/admin/backup/
chown -R mysql.mysql /var/lib/mysql
systemctl start mysqld


7.查看数据库
use xtra
show tables;

三、增量备份恢复

实操模拟准备:
优先全量备份
xtrabackup --backup -uroot -p`cat /root/mysql` --target-dir=/home/admin/backup/	

1.向数据库的表中添加两条新数据
use xtra;
create table test3(id int);
insert into test3 values(1),(2),(3);
create table test4(id int);
insert into test4 values(4),(5),(6);


2.第一次增量备份
xtrabackup --backup -uroot -p`cat /root/mysql` --target-dir=/home/admin/backup_1 --incremental-basedir=/home/admin/backup
or
xtrabackup --defaults-file=/etc/my.cnf --backup -uroot -p`cat /root/mysql` --target-dir=/home/admin/backup_1 --incremental-basedir=/home/admin/backup

3.向数据库的表中添加两条新数据
use xtra;
create table test5(id int);
insert into test5 values(1),(2),(3);
create table test6(id int);
insert into test6 values(4),(5),(6);

4.第二次增量备份
xtrabackup  --backup -uroot -p`cat /root/mysql` --target-dir=/home/admin/backup_2 --incremental-basedir=/home/admin/backup_1
or
xtrabackup --defaults-file=/etc/my.cnf --backup -uroot -p`cat /root/mysql` --target-dir=/home/admin/backup_2 --incremental-basedir=/home/admin/backup_1


5.停止数据库
systemctl stop mysqld


6.这时,再删除数据目录(database=/var/lib/mysql/data)
rm -rf /var/lib/mysql/data /var/lib/mysql/log

7.全量备份准备
xtrabackup  --prepare --apply-log-only --target-dir=/home/admin/backup
or
xtrabackup --defaults-file=/etc/my.cnf --prepare --apply-log-only --target-dir=/home/admin/backup

8.将增量备份合并到完全备份(若有多个增量备份,就执行多次)# 注意,增量备份--apply-log-only是防止数据回滚,最后一次的备份数据,是不需要添加--apply-log-only,否则会报错 ‘This target seems to be already prepared with --apply-log-only’

# 第一次合并
xtrabackup --prepare --apply-log-only --target-dir=/home/admin/backup --incremental-dir=/home/admin/backup_1
or
xtrabackup --defaults-file=/etc/my.cnf --prepare --apply-log-only --target-dir=/home/admin/backup/ --incremental-dir=/home/admin/backup_1

# 第二次合并
xtrabackup --prepare --target-dir=/home/admin/backup_1 --incremental-dir=/home/admin/backup_2
or
xtrabackup --defaults-file=/etc/my.cnf --prepare  --target-dir=/home/admin/backup_1 --incremental-dir=/home/admin/backup_2


9.恢复数据库
xtrabackup --copy-back --target-dir=/home/admin/backup/
or
xtrabackup --defaults-file=/etc/my.cnf --copy-back --target-dir=/home/admin/backup/
chown -R mysql.mysql /var/lib/mysql
systemctl start mysqld

10.查看数据库
use xtra
show tables;

11.数据恢复操作
mysql -uroot -p`cat /root/mysql`
use xtra
show tables;
drop table test3;
drop table test4;
rm -rf /home/admin/*


12.官方注解 https://docs.percona.com/percona-xtrabackup/8.0/prepare-incremental-backup.html
增量备份的步骤--prepare与完整备份不同。在完整备份中,将执行两种类型的操作来使数据库保持一致:已提交的事务从日志文件中针对数据文件重播,未提交的事务将回滚。在准备增量备份时,您必须跳过未提交事务的回滚,因为备份时未提交的事务可能正在进行中,并且很可能会在下一次增量备份中提交。您应该使用该 --apply-log-only选项来阻止回滚阶段。
如果您不使用 --apply-log-only 阻止回滚阶段的选项,那么您的增量备份将毫无用处。 事务回滚后,无法应用进一步的增量备份。

从您创建的完整备份开始,您可以准备它,然后将增量差异应用于它。回想一下,您有以下备份:

xtrabackup --backup -uroot -p`cat /root/mysql` --target-dir=/data/backups/base

xtrabackup --backup -uroot -p`cat /root/mysql` --target-dir=/data/backups/inc1 --incremental-basedir=/data/backups/base

xtrabackup --backup -uroot -p`cat /root/mysql` --target-dir=/data/backups/inc2 --incremental-basedir=/data/backups/inc1

/data/backups/base
/data/backups/inc1
/data/backups/inc2

为了准备基础备份,您需要--prepare照常运行,但要阻止回滚阶段:
xtrabackup --prepare --apply-log-only --target-dir=/data/backups/base

xtrabackup --prepare --apply-log-only --target-dir=/data/backups/base --incremental-dir=/data/backups/inc1

xtrabackup --prepare --target-dir=/data/backups/base --incremental-dir=/data/backups/inc2


恢复数据库
xtrabackup --defaults-file=/etc/my.cnf --copy-back --target-dir=/data/backups/base
chown -R mysql.mysql /var/lib/mysql
systemctl start mysqld

四、差异备份

实操模拟准备:
优先全量备份
xtrabackup --backup -uroot -p`cat /root/mysql` --target-dir=/home/admin/backup/	

1.向数据库的表中添加两条新数据
use xtra;
create table test3(id int);
insert into test3 values(1),(2),(3);
create table test4(id int);
insert into test4 values(4),(5),(6);


2.第一次增量备份
xtrabackup --backup -uroot -p`cat /root/mysql` --target-dir=/home/admin/backup_1 --incremental-basedir=/home/admin/backup


3.向数据库的表中添加两条新数据
use xtra;
create table test5(id int);
insert into test5 values(1),(2),(3);
create table test6(id int);
insert into test6 values(4),(5),(6);

4.第二次增量备份
xtrabackup  --backup -uroot -p`cat /root/mysql` --target-dir=/home/admin/backup_2 --incremental-basedir=/home/admin/backup


5.停止数据库
systemctl stop mysqld


6.这时,再删除数据目录(database=/var/lib/mysql/data)
rm -rf /var/lib/mysql/data /var/lib/mysql/log

7.全量备份准备
xtrabackup  --prepare --apply-log-only --target-dir=/home/admin/backup

6.将增量备份合并到完全备份(若有多个增量备份,就执行多次)# 注意,增量备份--apply-log-only只有
# 第一次全备恢复
xtrabackup --prepare --apply-log-only --target-dir=/home/admin/backup 

# 差异备份
xtrabackup --prepare --target-dir=/home/admin/backup --incremental-dir=/home/admin/backup_2


7.恢复数据库
xtrabackup --defaults-file=/etc/my.cnf --copy-back --target-dir=/home/admin/backup/
chown -R mysql.mysql /var/lib/mysql
systemctl start mysqld

8.查看数据库
use xtra
show tables;

五、主从恢复

其实就是把主库备份传输到从库,从而根据实际情况,执行增量备份恢复,或者差异备份恢复。可以使用rsync或者通过scp,把传输的文件copy过去,进而执行恢复命令。
# 10.128.0.3
xtrabackup --backup -uroot -p`cat /root/mysql` --target-dir=/home/admin/backup/
scp -pr /home/admin/backup 10.128.0.4:/tmp

# 10.128.0.4
systemctl stop mysqld
rm -rf /var/lib/mysql/data/* /var/lib/mysql/log/*
xtrabackup --prepare --target-dir=/tmp/backup/

# 恢复数据库并重启数据库
xtrabackup --copy-back --target-dir=/tmp/backup/
chown -R mysql.mysql /var/lib/mysql
# 启动数据库
systemctl start mysqld

# 注意:恢复之后,主从mysql密码一致。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值