xtrabackup之Innobackupex增量备份及恢复

演示增量备份

#启动一个全备
innobackupex 
> --defaults-file=/mysql/mysqldata/3306/my.cnf 
> --host=127.0.0.1 
> --user=xtrabk 
> --password='onlybackup' /mysql/mysqldata/backup/

............
160527 05:47:55  innobackupex: completed OK!
[mysql@hadoop1 mysqldata]$
#新增记录,以便区分全备与增备
[mysql@hadoop1 mysqldata]$ mysql
mysql> create database polestar_myisam;
mysql> create database polestar_innodb;
mysql> create table m_polestar engine=myisam select * from mysql.user;
mysql> create table i_polestar engine=innodb select * from mysql.user;
#启动一个增量备份 
innobackupex 
--defaults-file=/mysql/mysqldata/3306/my.cnf 
--host=127.0.0.1 
--user=xtrabk 
--password='onlybackup' 
--incremental-basedir=/mysql/mysqldata/backup/2016-05-27_05-47-34 
--incremental /mysql/mysqldata/backup/

............
160527 06:08:43  innobackupex: completed OK!
[mysql@hadoop1 mysqldata]$
#再新增记录,以便区分第一次增备
mysql> use polestar_myisam;
Database changed
mysql> insert into m_polestar  select * from mysql.user;
mysql> use polestar_innodb;
mysql> insert into i_polestar  select * from mysql.user;
#以上次增量备份为基础 再次增量备份
innobackupex 
--defaults-file=/mysql/mysqldata/3306/my.cnf 
--host=127.0.0.1 
--user=xtrabk 
--password='onlybackup' 
--incremental-basedir=/mysql/mysqldata/backup/2016-05-27_06-08-22 
--incremental /mysql/mysqldata/backup/

.......
160527 06:15:15  innobackupex: completed OK!
[mysql@hadoop1 mysqldata]$ 

  至此,三次备份完成(一次全备,两个增量备份).下面看下三个备份集中的LSN号顺序:

[mysql@hadoop1 backup]$ more ./2016-05-27_05-47-34/xtrabackup_checkpoints
backup_type = full-backuped
from_lsn = 0
to_lsn = 1626134
last_lsn = 1626134
[mysql@hadoop1 backup]$ more ./2016-05-27_06-08-22/xtrabackup_checkpoints
backup_type = incremental
from_lsn = 1626134
to_lsn = 1643331
last_lsn = 1643331
[mysql@hadoop1 backup]$ more ./2016-05-27_06-14-55/xtrabackup_checkpoints
backup_type = incremental
from_lsn = 1643331
to_lsn = 1650836
last_lsn = 1650836
[mysql@hadoop1 backup]$

恢复增量备份

#先备份整个备份集
[mysql@hadoop1 mysqldata]$ ls
3306   3307  backup
[mysql@hadoop1 mysqldata]$ cp -rf backup  backup02
#先做基于全备的apply,注意,此时使用了--redo-only   
innobackupex 
--defaults-file=/mysql/mysqldata/3306/my.cnf 
--apply-log 
--redo-only 
/mysql/mysqldata/backup/2016-05-27_05-47-34

..........
160527 06:22:33  innobackupex: completed OK!
[mysql@hadoop1 3306]$
注意目录中文件的修改时间变化
[mysql@hadoop1 2016-05-27_05-47-34]$ pwd
/mysql/mysqldata/backup/2016-05-27_05-47-34
[mysql@hadoop1 2016-05-27_05-47-34]$ ls -l
total 104592
-rw-rw-r-- 1 mysql mysql       241 May 27 05:47 backup-my.cnf
-rw-rw---- 1 mysql mysql 104857600 May 27 06:22 ibdata01
drwx------ 2 mysql mysql      4096 May 27 05:47 mysql
drwxrwxr-x 2 mysql mysql      4096 May 27 05:47 performance_schema
drwxrwxr-x 2 mysql mysql      4096 May 27 05:47 polestar
drwxrwxr-x 2 mysql mysql      4096 May 27 05:47 polestar02
drwxrwxr-x 2 mysql mysql      4096 May 27 05:47 test
-rw-rw-r-- 1 mysql mysql        13 May 27 05:47 xtrabackup_binary
-rw-rw-r-- 1 mysql mysql        23 May 27 05:47 xtrabackup_binlog_info
-rw-rw---- 1 mysql mysql        77 May 27 06:22 xtrabackup_checkpoints
-rw-rw---- 1 mysql mysql   2097152 May 27 06:22 xtrabackup_logfile
[mysql@hadoop1 2016-05-27_05-47-34]$
--基于第一个增备的apply
innobackupex 
--defaults-file=/mysql/mysqldata/3306/my.cnf 
--apply-log 
--redo-only 
/mysql/mysqldata/backup/2016-05-27_05-47-34 
--incremental-dir=/mysql/mysqldata/backup/2016-05-27_06-08-22
...........
160527 06:26:42  innobackupex: completed OK!
[mysql@hadoop1 3306]$
注意文件的修改时间和上次恢复时的不同
[mysql@hadoop1 2016-05-27_05-47-34]$ ls -l
total 104600
-rw-rw-r-- 1 mysql mysql       241 May 27 05:47 backup-my.cnf
-rw-rw---- 1 mysql mysql 104857600 May 27 06:26 ibdata01
drwx------ 2 mysql mysql      4096 May 27 05:47 mysql
drwxrwxr-x 2 mysql mysql      4096 May 27 05:47 performance_schema
drwxrwxr-x 2 mysql mysql      4096 May 27 06:26 polestar
drwxrwxr-x 2 mysql mysql      4096 May 27 06:26 polestar02
drwxrwx--- 2 mysql mysql      4096 May 27 06:26 polestar_innodb
drwxrwxr-x 2 mysql mysql      4096 May 27 06:26 polestar_myisam
drwxrwxr-x 2 mysql mysql      4096 May 27 05:47 test
-rw-rw-r-- 1 mysql mysql        13 May 27 05:47 xtrabackup_binary
-rw-rw-r-- 1 mysql mysql        24 May 27 06:26 xtrabackup_binlog_info
-rw-rw---- 1 mysql mysql        77 May 27 06:26 xtrabackup_checkpoints
-rw-rw---- 1 mysql mysql   2097152 May 27 06:22 xtrabackup_logfile
[mysql@hadoop1 2016-05-27_05-47-34]$ 
--基于最后一个增备的apply 
innobackupex 
--defaults-file=/mysql/mysqldata/3306/my.cnf 
--apply-log 
/mysql/mysqldata/backup/2016-05-27_05-47-34 
--incremental-dir=/mysql/mysqldata/backup/2016-05-27_06-14-55

...........
160527 06:33:17  innobackupex: completed OK!
[mysql@hadoop1 3306]$ 
注意文件修改时间的变化
[mysql@hadoop1 2016-05-27_05-47-34]$ ls -l
total 104600
-rw-rw-r-- 1 mysql mysql       241 May 27 05:47 backup-my.cnf
-rw-rw---- 1 mysql mysql 104857600 May 27 06:33 ibdata01
drwx------ 2 mysql mysql      4096 May 27 05:47 mysql
drwxrwxr-x 2 mysql mysql      4096 May 27 05:47 performance_schema
drwxrwxr-x 2 mysql mysql      4096 May 27 06:26 polestar
drwxrwxr-x 2 mysql mysql      4096 May 27 06:26 polestar02
drwxrwx--- 2 mysql mysql      4096 May 27 06:26 polestar_innodb
drwxrwxr-x 2 mysql mysql      4096 May 27 06:26 polestar_myisam
drwxrwxr-x 2 mysql mysql      4096 May 27 05:47 test
-rw-rw-r-- 1 mysql mysql        13 May 27 05:47 xtrabackup_binary
-rw-rw-r-- 1 mysql mysql        24 May 27 06:33 xtrabackup_binlog_info
-rw-rw---- 1 mysql mysql        77 May 27 06:33 xtrabackup_checkpoints
-rw-rw---- 1 mysql mysql   2097152 May 27 06:22 xtrabackup_logfile
[mysql@hadoop1 2016-05-27_05-47-34]$ 

数据库恢复

innobackupex 
--defaults-file=/mysql/mysqldata/3306/my.cnf 
--copy-back 
/mysql/mysqldata/backup/2016-05-27_05-47-34

......

160527 06:38:03  innobackupex: completed OK!
[mysql@hadoop1 3306]$
--验证
[mysql@hadoop1 3306]$mysqld_safe --defaults-file=/mysql/mysqldata/3306/my.cnf &
mysql> use polestar_myisam;
mysql> show tables;
+---------------------------+
| Tables_in_polestar_myisam |
+---------------------------+
| m_polestar                | 
+---------------------------+
mysql> select count(*) from m_polestar;
+----------+
| count(*) |
+----------+
|       14 | 
+----------+
mysql> 

小结

a、增量备份是基于增量或全备的基础之上完成的。
b、增量备份的基础是InnoDB引擎使用了LSN机制,非InnoDB引擎不存在增量备份的说法,每次都是全备。
c、对于增量备份的恢复期间需要对已提交的事务前滚,未提交的事务回滚。
d、增量备份的恢复应按照备份的顺利逐个逐个replay,需要使用--apply-log --redo-only选项。
e、仅仅最后一个增量备份不需要使用--redo-only选项
原文地址:https://www.cnblogs.com/polestar/p/5636278.html