所示:
增量备份基于全量备份,所以需要创建一个全量备份。全量备份的命令如下:
innobackupex --port 3306 --socket /tmp/mysql_3306.sock --user=root --password=你的密码 /data/backup/full
全量备份后生成的(时间子)目录为 2019-04-19_21-28-32,这个目录会在第一次增量备份是用到,incremental-basedir 选项参数需要细化到这一层,否则报错。意思是找不到xtrabackup_checkpoints文件。
全量备份后,向表中insert 2 笔 数据,如下:
第一个增量备份
innobackupex --port 3306 --socket /tmp/mysql_3306.sock --user=root --password=你的密码 --incremental --incremental-basedir=/data/backup/full/2019-04-19_21-28-32 /data/backup/incremental
增量备份产生的目录文件为 /data/backup/incremental/2019-04-19_21-30-11
第一次增量备份后,继续insert 2笔数据
第二个增量备份(我们是否可以在增量备份的基础上再做增量备份呢?答案是肯定的,只要把--incremental-basedir设置为上一次增量备份的目录即可。即:增量备份可以基于以前的增量备份完成数据备份。)
innobackupex --port 3306 --socket /tmp/mysql_3306.sock --user=root --password=你的密码 --incremental --incremental-basedir=/data/backup/incremental/2019-04-19_21-30-11 /data/backup/incremental
第二次增量备份产生的目录文件为 /data/backup/incremental/2019-04-19_21-35-33
再次插入2笔数据,用来验证第三次增量备份
第三个增量备份
innobackupex --port 3306 --socket /tmp/mysql_3306.sock --user=root --password=你的密码 --incremental --incremental-basedir=/data/backup/incremental/2019-04-19_21-35-33 /data/backup/incremental
第三次增量备份产生的目录文件为 /data/backup/incremental/2019-04-19_21-38-16
再次插入2笔验证数据,用来验证第四次增量备份。
生成第四个增量备份
innobackupex --port 3306 --socket /tmp/mysql_3306.sock --user=root --password=你的密码 --incremental --incremental-basedir=/data/backup/incremental/2019-04-19_21-38-16 /data/backup/incremental
第四次增量备份产生的目录文件为 /data/backup/incremental/2019-04-19_21-40-02
最后一次插入2笔验证数据
我们希望还原后的数据库是 刚刚作为第三次完整增量备份的数据库状态。
(此时T_full_table 表的数据,应该为 1(全量),2,3 (一增),21,22 (二赠),31,32 (三赠))
2. 增量恢复的Prepare阶段
1) 在全量备份上执行
innobackupex --apply-log --redo-only /data/backup/full/2019-04-19_21-28-32
2) 在第一个增量备份上执行 (增量备份产生的子目录是 2019-04-19_21-30-11,前面完整备份的目录是 /data/backup/full/2019-04-19_21-28-32)
innobackupex --apply-log --redo-only --incremental-dir=/data/backup/incremental/2019-04-19_21-30-11 /data/backup/full/2019-04-19_21-28-32
3) 在第二个增量备份上执行 (增量备份产生的子目录是 2019-04-19_21-35-33,前面完整备份的目录是 /data/backup/full/2019-04-19_21-28-32)
innobackupex --apply-log --redo-only --incremental-dir=/data/backup/incremental/2019-04-19_21-35-33 /data/backup/full/2019-04-19_21-28-32
4) 在第二个增量备份上执行 (增量备份产生的子目录是 2019-04-19_21-38-16 ,前面完整备份的目录是 /data/backup/full/2019-04-19_21-28-32)
innobackupex --apply-log --incremental-dir=/data/backup/incremental/2019-04-19_21-38-16 /data/backup/full/2019-04-19_21-28-32
3. 增量备份的恢复阶段
通过prepare阶段,base 目录包含了所有数据。在恢复时,只需要通过以下操作即可。
innobackupex --datadir=/data/mysql3307/data --copy-back /data/backup/full/2019-04-19_21-28-32
在数据库实例启动前,需要修改文件的所有权,执行指令如下
chown -R mysql:mysql /data/mysql3307/data
4. 开启实例,进行验证
恢复后的数据,正是我们想要的数据,测试到达了预期效果。
注:
现在xtrabackup版本升级到了2.4,相比之前的2.1有了比较大的变化:innobackupex
功能全部集成到 xtrabackup
里面,只有一个 binary,另外为了使用上的兼容考虑,innobackupex
作为 xtrabackup
的一个软链,即xtrabackup现在支持非Innodb表备份,并且Innobackupex在下一版本中移除,建议通过xtrabackup替换innobackupex。
-----本文部分内容参考梳理于网络知识,仅为