percona-xtrabackup

 

xtrabackup工具既支持全量备份也支持增量备份,前面文章我们讲解了全量备份的实现,本文继续讲解如何实现增量备份。创建的目录和数据库复用前面的【生产级Mysql物理量备份-Xtrabackup】文章。

https://www.percona.com/doc/percona-xtrabackup/2.4/backup_scenarios/incremental_backup.html

 

备份和恢复

1、先执行全量备份,可以复用前面章节的全量备份

 

  •  
xtrabackup --backup --target-dir=/opt/backup/mysql/physical/full/first

 

可以通过less /opt/backup/mysql/physical/full/first/xtrabackup_checkpoints查看检查点信息。注意backup_type为full-backuped, from_lsn是备份的起始LSN,to_lsn是结束LSN,下一次增量备份的from_lsn正确应该和上一次的to_lsn相同。

 

生产级Mysql物理增量备份-Xtrabackup_Mysql

 

2、模拟往数据库test_backup的sys_log表先插入数据

 

  •  
use test_backup;select * from sys_log;insert into sys_log(log_id)values(1);

 

生产级Mysql物理增量备份-Xtrabackup_Mysql_02

 

3、基于全量备份进行inc1增量备份

 

  •  
xtrabackup \--backup \--target-dir=/opt/backup/mysql/physical/increment/inc1 \--incremental-basedir=/opt/backup/mysql/physical/full/first

--incremental-basedir:基于某个全量备份目录

可以通过less /opt/backup/mysql/physical/increment/inc1/xtrabackup_checkpoints查看检查点信息。

 

生产级Mysql物理增量备份-Xtrabackup_Mysql_03

 

注意它们的backup_type是不同的,另外from_lsn和之前全量备份的to_lsn是相同的。

4、继续模拟插入第二条数据

 

  •  
use test_backup;select * from sys_log;insert into sys_log(log_id)values(2);

 

生产级Mysql物理增量备份-Xtrabackup_Mysql_04

 

5、基于上一次inc1增量备份进行新的inc2增量备份

 

  •  
xtrabackup \--backup \--target-dir=/opt/backup/mysql/physical/increment/inc2 \--incremental-basedir=/opt/backup/mysql/physical/increment/inc1

可以通过less /opt/backup/mysql/physical/increment/inc2/xtrabackup_checkpoints查看检查点信息。

 

生产级Mysql物理增量备份-Xtrabackup_Mysql_05

第二个增量备份的from_lsn和第一个增量备份inc1的to_lsn是相同的。

 

6、模拟误删除包含在增量备份后的新增那两条数据

 

  •  
delete from sys_log where log_id = 1;delete from sys_log where log_id = 2;

 

生产级Mysql物理增量备份-Xtrabackup_Mysql_06 

 

可以看到两条数据被误删除了。

7、准备增量恢复

现在我们备份顺序是这样的:

 

  •  
/opt/backup/mysql/physical/full/first/opt/backup/mysql/physical/increment/inc1/opt/backup/mysql/physical/increment/inc2

因为所有增量备份都是基于某个全量备份,所以准备增量备份前要先准备那个全量备份,注意增量恢复需要使用--apply-log-only选项阻止回滚阶段,如果不使用该 选项来阻止回滚阶段,那么增量备份将毫无用处。发生回滚事务后,无法应用进一步的增量备份:

 

  •  
xtrabackup --prepare \--apply-log-only \--target-dir=/opt/backup/mysql/physical/full/first

将增量备份inc1应用到全量备份first中:

 

  •  
xtrabackup \--prepare \--apply-log-only \--target-dir=/opt/backup/mysql/physical/full/first \--incremental-dir=/opt/backup/mysql/physical/increment/inc1

8、先恢复第一次增量,确认log_id为1的那条数据是否恢复成功

 

  •  
service mysql stoprm -rf /usr/local/mysql/data/*xtrabackup --copy-back --target-dir=/opt/backup/mysql/physical/full/firstchown mysql:mysql -R /usr/local/mysql/service mysql start 

可以看到,第一条误删的数据已还原。

生产级Mysql物理增量备份-Xtrabackup_Mysql_07

 

9、继续将增量备份inc2应用到增量备份inc1中。

 

  •  
xtrabackup \--prepare \--apply-log-only \--target-dir=/opt/backup/mysql/physical/full/first \--incremental-dir=/opt/backup/mysql/physical/increment/inc2

 

10、参照第8个步骤恢复第二个增量备份,然后可以看到第二条误删的数据也回来了

 

  •  
service mysql stoprm -rf /usr/local/mysql/data/*xtrabackup --copy-back --target-dir=/opt/backup/mysql/physical/full/firstchown mysql:mysql -R /usr/local/mysql/service mysql start

 

生产级Mysql物理增量备份-Xtrabackup_Mysql_08

 

上面我们演示了如何使用Percona-Xtrabackup工具实现物理增量热备份。