一、xtrabackup增量备份

1.增量备份过程

  1. 每次增量备份都会生成一个以时间命名的备份目录,用以存放所有增量备份的数据。
  2. 第1次增量备份--incremental-basedir=要指向上一次完全备份的路径,而后每一次增量备份--incremental-basedir=都要指向上一次增量的备份。
  3. 增量备份目录中的“xtrabackup_checkpoints”文件backup_type = incremental表示当前备份的类型。
  4. 增量备份仅能应用于InnoDB或XtraDB表,对于MyISAM表而言,执行增量备份实际上进行的是完全备份。

2.第1次增量备份

1
2
3
4
5
6
innobackupex --defaults-file=/data/mysql_data_3306/my.cnf --user=mysqlbackup --password=76qbg20WV7dk3KUE --incremental /backup/mysql/ --incremental-basedir=/backup/mysql/2018-06-11_07-56-10/

# 参数说明
--defaults-file 主配置文件
--incremental 增量备份的存储路径,会生成一个当前系统时间命名的目录
--incremental-basedir 第一次增量备份,指向上一次全量备份的目录

xtrabackup_checkpoints 查看

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 查看全备的checkpoints
$ cat xtrabackup_checkpoints
backup_type = full-prepared # full-prepared 全量
from_lsn = 0
to_lsn = 12868004
last_lsn = 12868004 # 位置点 0 ~ 12868004
compact = 0
recover_binlog_info = 0

# 查看第1次增量的checkpoints
$ cat xtrabackup_checkpoints
backup_type = incremental # incremental 增量
from_lsn = 12868004
to_lsn = 12892972
last_lsn = 12892972 # 位置点12868004 ~ 12892972
compact = 0
recover_binlog_info = 0

3.第2次增量备份

1
2
3
4
5
6
7
8
9
10
11
12
13
$ innobackupex --defaults-file=/data/mysql_data_3306/my.cnf --user=mysqlbackup --password=76qbg20WV7dk3KUE --incremental /backup/mysql/ --incremental-basedir=/backup/mysql/2018-06-11_10-31-07/

# 参数说明
--incremental-basedir 第二次增量备份,指向上一次增量备份的目录

# 查看第2次的checkpoints
$ cat xtrabackup_checkpoints
backup_type = incremental # incremental 增量
from_lsn = 12892972
to_lsn = 12896938
last_lsn = 12896938 # # 位置点 12892972 ~ 12896938
compact = 0
recover_binlog_info = 0

二、xtrabackup增量恢复

1.增量恢复过程

  1. 恢复增量备份到完全备份(==开始恢复的增量备份要添加--redo-only参数,到最后一次增量备份要去掉--redo-only==)
  2. 对整体的完全备份进行恢复--apply-log,回滚未提交的数据
  3. 完全备份恢复--copy-back

2.增量恢复

准备+整合增量

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 准备一个全备
innobackupex --apply-log --redo-only /backup/mysql/2018-06-11_07-56-10/ # 全量的目录
# 位置点 0 ~ 12868004

# 将第一份增量备份整合到全量
innobackupex --apply-log --redo-only /backup/mysql/2018-06-11_07-56-10/ --incremental-dir=/backup/mysql/2018-06-11_10-31-07/
# 位置点 0 ~ 12892972

# 将最后一次增量备份整合到全量
innobackupex --apply-log /backup/mysql/2018-06-11_07-56-10/ --incremental-dir=/backup/mysql/2018-06-11_10-38-55/
# 位置点 0 ~ 12896938

$ du -sh *
647M 2018-06-11_07-56-10 # 整合完毕得到全量包

把所有合在一起的完全备份整体进行一次--apply-log操作,回滚未提交的数据

1
$ innobackupex --apply-log /backup/mysql/2018-06-11_07-56-10/

全量恢复

1
$ innobackupex --defaults-file=/data/mysql_data_3306.201806111057/my.cnf --copy-back /backup/mysql/2018-06-11_07-56-10/