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相同。
2、模拟往数据库test_backup的sys_log表先插入数据
use test_backup;select * from sys_log;insert into sys_log(log_id)values(1);
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查看检查点信息。
注意它们的backup_type是不同的,另外from_lsn和之前全量备份的to_lsn是相同的。
4、继续模拟插入第二条数据
use test_backup;select * from sys_log;insert into sys_log(log_id)values(2);
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查看检查点信息。
第二个增量备份的from_lsn和第一个增量备份inc1的to_lsn是相同的。
6、模拟误删除包含在增量备份后的新增那两条数据
delete from sys_log where log_id = 1;delete from sys_log where log_id = 2;
可以看到两条数据被误删除了。
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
可以看到,第一条误删的数据已还原。
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
上面我们演示了如何使用Percona-Xtrabackup工具实现物理增量热备份。