利用Percona Xtrbackup做增量备份以及实现完全恢复

该部分介绍了怎样做增量备份及如何利用全量备份,增量备份,binlog进行完全恢复。

增量备份只影响xtradb和innodb表,其他引擎将会复制所有数据。

这里计划做一次全量备份,三次增量备份。后两次的增量备份都基于上次的增量备份。

一 增量备份与恢复

1.1 备份

1.1.1 全量备份

增量备份基于全量备份,所以需要先创建一个全量备份。

全量备份命令示例:

innobackupex  --port=3307 --user=XtrabackupUser --password=123456 /download/bak/xtrbak/

在备份路径下生成了一个子目录2020-03-18_19-46-30。

1.1.2 增量备份

增量备份需要指定--incremental选项和BASEDIR信息。

BASEDIR可以指向之前的全备,也可以指向上一个增量备份。

                              

#增量备份1

innobackupex  --port=3307 --user=XtrabackupUser --password=123456 --incremental --incremental-basedir=/download/bak/xtrbak/2020-03-18_19-46-30 /download/bak/xtrbak/

在备份路径下生成了一个子目录2020-03-18_19-53-42。

 

#增量备份2

innobackupex  --port=3307 --user=XtrabackupUser --password=123456 --incremental --incremental-basedir=/download/bak/xtrbak/2020-03-18_19-53-42 /download/bak/xtrbak/

在备份路径下生成了一个子目录2020-03-18_19-55-45。

 

#增量备份3

innobackupex  --port=3307 --user=XtrabackupUser --password=123456 --incremental --incremental-basedir=/download/bak/xtrbak/2020-03-18_19-55-45 /download/bak/xtrbak/

在备份路径下生成了一个子目录2020-03-18_19-56-55。

1.2 故障模拟

删除数据文件:

cd /data/server/mysql_3307/

mv data data_bak

重启数据库失败:

Starting MySQL. ERROR! The server quit without updating PID file (/data/server/mysql_3307/data/pc1.pid)

1.3 恢复

1.3.1 prepare

规则:

需要在全量备份及除最后一个增量备份外的所有增量备份上--apply log --redo only,在最后一个增量备份上加--apply log,即只有最后一个备份中不用加--redo only.

 

#对全量备份做prepare

innobackupex --apply-log --redo-only 2020-03-18_19-46-30

 

#将增量备份1合并到全量备份中(incremental-dir后跟增量备份目录)

innobackupex --apply-log --redo-only 2020-03-18_19-46-30 --incremental-dir=/download/bak/xtrbak/2020-03-18_19-53-42

 

#将增量备份2合并到全量备份中

innobackupex --apply-log --redo-only 2020-03-18_19-46-30 --incremental-dir=/download/bak/xtrbak/2020-03-18_19-55-45

 

#将增量备份3合并到全量备份中(不加redo-only)

innobackupex --apply-log 2020-03-18_19-46-30 --incremental-dir=/download/bak/xtrbak/2020-03-18_19-56-55

 

1.3.2 使用innobackupex做恢复

在prepare阶段后,如果需要用备份数据来恢复数据库,则需要指定--copy-back和备份数据所在的目录即可。

 

#如果数据库没被关闭,需要关闭数据库:

service mysqld stop

 

#如果数据目录不为空,则将数据目录设置为空

cd /data/server/mysql_3307/

mv data data_bak

 

#在恢复机器上恢复数据:

innobackupex --copy-back /download/bak/xtrbak/2020-03-18_19-46-30

chown -R mysql:mysql data

此时,数据恢复到了备份时刻的状态。

1.3.3 利用binlog做完全恢复

若想恢复到故障时刻,需要结合binlog进行完全恢复:

关闭相应的应用接口,阻止往数据库里写入数据,防止数据错乱。

service mysqld start

 

#查看应该从哪个binlog及position进行恢复

查看最近的一个增量备份的xtrabackup_binlog_info文件。

cd 2020-03-18_19-56-55

[root@pc1 2020-03-18_19-56-55]# cat xtrabackup_binlog_info

mysql-bin.000037    1042    2daff865-67ce-11ea-874e-080027040516:1-11,

a4ac8cd2-e17c-11e9-a602-080027040516:1-89,

d4d2f1d2-66f2-11ea-972a-080027040516:1-17

 

#查看有哪些binlog需要恢复(上面阴影部分的binlog及其之后的binlog都需要恢复)

mysql> show binary logs;

……

| mysql-bin.000037 |      1345 |

|mysql-bin.000038 |       577 |

| mysql-bin.000039 |       530 |

| mysql-bin.000040 |       274

 

#执行flush logs,以防止恢复最后一个binlog时,会重复复制,因为恢复binlog本身的操作也会记录到binlog里。

 

#恢复

/usr/local/mysql/bin/mysqlbinlog --skip-gtids=true  --start-position=1042 mysql-bin.000037 | mysql -u root -p

/usr/local/mysql/bin/mysqlbinlog --skip-gtids=true mysql-bin.000038 mysql-bin.000039 mysql-bin.000040 | mysql -u root -p

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值