xtrabackup的初使用(3)_xtrabackup

3、增量的备份恢复操作

然后进行一下增量备份恢复的测试工作: 
首先在test数据库下创建一张测试表:

xtrabackup的初使用(3)_xtrabackup_02

由于之前已经做过了全备了,所以这里就直接可以做增量备份。 
使用如下命令进行增量备份:

innobackupex --defaults-file=/etc/my.cnf -uroot -pmysql123 --incremental-basedir=/data/backup/0408/incr --incremental /data/backup/0408/incr

很不幸失败了:

xtrabackup的初使用(3)_xtrabackup_03

原因嘛,也给出来了

error: failed to read metadata from /data/backup/0408/incr//xtrabackup_checkpoints

当然,这个错误很明显,就是要找到之前全备的一个基点,也就是增量备的起始点lsn,这样才能进行增量备份,但是这里我直接指定了增量备份的basedir目录/data/backup/0408/incr,所以导致报了错,然后修改回来就没有问题了。这里引用jeanron大师的总结,很精辟: 
原因就在于里面的一个关键文件 _checkpoints 
使用增备得有一个参考点,从哪里开始,即从哪个LSN开始,这个LSN在指定的参数–incremental-basedir=/data/backup/0408/incr下不存在,因为这个是一个新目录,所以需要指向全库备份的目录。 
然后修复后备份就没问题了,英为有了这个参考点LSN,所以需要要说明的是这个备份其实有累计增量和差异增量了。 
这个怎么理解呢,比如周日做一个全备,周一做一个增备,周二做一个周日全备到周二的一个增备,这就是一个累计增量备份,而周三的时候做一个周二至周三数据变化的备份,就是一个差异增量备份。

innobackupex --defaults-file=/etc/my.cnf -uroot -pmysql123 --incremental-basedir=/data/backup/0408/ --incremental /data/backup/0408/incr


为了区别两次增量的不同,继续插入

xtrabackup的初使用(3)_xtrabackup_04

再次进行基于上一次增量备份的增量备份:

innobackupex --defaults-file=/etc/my.cnf -uroot -pmysql123 --incremental-basedir=/data/backup/0408/incr/2017-03-04_13-21-52 --incremental /data/backup/0408/incr

然后删除test数据库中的表t

xtrabackup的初使用(3)_xtrabackup_05

然后我们对比一下全备,第一次增备,第二次增备的checkpoints文件内容:

xtrabackup的初使用(3)_xtrabackup_06

lsn值逐渐递增。 
增量还原分为两个步骤 
a.prepare

innobackupex –apply-log /path/to/BACKUP-DIR

此时数据可以被程序访问使用;可使用—use-memory选项指定所用内存以加快进度,默认100M; 
b.recover

innobackupex –copy-back /path/to/BACKUP-DIR

从my.cnf读取datadir/innodb_data_home_dir/innodb_data_file_path等变量

先复制MyISAM表,然后是innodb表,最后为logfile;

开始合并操做: 
第一次是全备的redo apply

innobackupex --defaults-file=/etc/my.cnf -uroot -pmysql123 --apply-log --redo-only /data/backup/0408/


第二次是第一次增备的redo apply

innobackupex --defaults-file=/etc/my.cnf -uroot -pmysql123 --apply-log --redo-only /data/backup/0408/ --incremental-dir=/data/backup/0408/incr/


其实整个过程就是一个merge的过程,可以看到全备的checkpoint中的信息已经发生了变化。

xtrabackup的初使用(3)_xtrabackup_07

然后进行第一次还原操作:

innobackupex --defaults-file=/etc/my.cnf -uroot -pmysql123 --copy-back /data/backup/0408/


然后赋予相应的mysql权限 
注意:此次没有关闭mysql服务 
登陆:

xtrabackup的初使用(3)_xtrabackup_08

终于恢复回来了,好不容易!! 
TIPS:在进行恢复的过程当中还是需要关闭服务再恢复,再启动服务,不然的话,还是会出现上述的报错,还挺麻烦。 
这个过程我们相当于完成了一个全备+一个增备的数据恢复过程。 
而我们在一个增备之后又插入了一些数据,这个怎么继续恢复呢,还是prepare的过程。这个路径需要注意,还是merge到全备中。 
tips:在prepare阶段,不能关闭MySQL的服务,在copy的阶段再进行关闭MySQL服务的操作

innobackupex --defaults-file=/etc/my.cnf -uroot -pmysql123 --apply-log --redo-only /data/backup/0408/ --incremental-dir=/data/backup/0408/incr/2017-03-04_13-35-29

查看xtrabackup_checkpoints

xtrabackup的初使用(3)_xtrabackup_09

已经更新到了最新的lsn号 
------

未完待续!!!