提示:在恢复完成之后应该再次做一次完全备份,后期的增量备份都依照这次的完全备份来做。
[root@MariaDB ~]# innobackupex --user root --password centos/backup
使用innobackupex进行增量备份
每个InnoDB的页面都会包含一个LSN信息,每当相关的数据发生改变,相关的页面的LSN就会自动增长。这正是InnoDB表可以进行增量备份的基础,即innobackupex通过备份上次完全备份之后发生改变的页面来实现。
要实现第一次增量备份,可以使用下面的命令进行:
# innobackupex --incremental /backup--incremental-basedir=BASEDIR
其中,BASEDIR指的是完全备份所在的目录,此命令执行结束后,innobackupex命令会在/backup目录中创建一个新的以时间命��的目录以存放所有的增量备份数据。另外,在执行过增量备份之后再一次进行增量备份时,其--incremental-basedir应该指向上一次的增量备份所在的目录。
需要注意的是,增量备份仅能应用于InnoDB或XtraDB表,对于MyISAM表而言,执行增量备份时其实进行的是完全备份。
“准备”(prepare)增量备份与整理完全备份有着一些不同,尤其要注意的是:
(1)需要在每个备份(包括完全和各个增量备份)上,将已经提交的事务进行“重放”。“重放”之后,所有的备份数据将合并到完全备份上。
(2)基于所有的备份将未提交的事务进行“回滚”。
于是,操作就变成了:
# innobackupex --apply-log --redo-onlyBASE-DIR
接着执行:
# innobackupex --apply-log --redo-onlyBASE-DIR --incremental-dir=INCREMENTAL-DIR-1
而后是第二个增量:
# innobackupex --apply-log --redo-only BASE-DIR--incremental-dir=INCREMENTAL-DIR-2
其中BASE-DIR指的是完全备份所在的目录,而INCREMENTAL-DIR-1指的是第一次增量备份的目录,INCREMENTAL-DIR-2指的是第二次增量备份的目录,其它依次类推,即如果有多次增量备份,每一次都要执行如上操作;
备份过程
由于上面的完全备份恢复之后又进行了一次完全备份,这里不再进行完全备份,增量备份直接根据上面的完全备份进行。
查看lsn日志的起始和结束位置,第一次增量备份的LSN起始位置就是完全备份LSN的结束位置
[root@MariaDB ~]# cat/backup/2015-06-15_23-45-01/xtrabackup_checkpoints
backup_type = full-backuped
from_lsn = 0
to_lsn = 1602246
last_lsn = 1602246
compact = 0
修改数据库内容
MariaDB[hellodb]> select * from tb1;
+------+
|id |
+------+
| 1 |
| 2 |
| 3 |
| 21 |
| 22 |
| 23 |
+------+
MariaDB[hellodb]> delete from tb1 where id=21;
MariaDB[hellodb]> delete from tb1 where id=22;
MariaDB[hellodb]> select * from tb1;
+------+
|id |
+------+
| 1 |
| 2 |
| 3 |
| 23 |
+------+
第一次增量备份
只需要指向上一次完全备份的位置和这一次增量备份的存储位置即可
[root@MariaDB ~]# innobackupex --user root--password centos --incremental /backup/ --incremental-basedir=/backup/2015-06-15_23-45-01/
备份完成之后查看checkpoints信息
[root@MariaDB ~]# cat/backup/2015-06-15_23-47-02/xtrabackup_checkpoints
backup_type = incremental #备份类型表示为增量
from_lsn = 1602246 #表示备份的起始位置
to_lsn = 1604539
last_lsn = 1604539
compact = 0
再次修改一些数据
MariaDB[hellodb]> insert into tb1 values (1000),(9000);
MariaDB[hellodb]> select * from tb1;
+------+
|id |
+------+
| 1 |
| 2 |
| 3 |
| 23 |
|1000 |
|9000 |
+------+
第二次做增量备份
这是备份是基于第一次增量备份进行
[root@MariaDB ~]# innobackupex --user root--password centos --incremental /backup--incremental-basedir=/backup/2015-06-15_23-47-02/
[root@MariaDB ~]# cat/backup/2015-06-15_23-51-55/xtrabackup_checkpoints
backup_type = incremental
from_lsn = 1604539 #备份起始位置是第一次增量备份的结束位置
to_lsn = 1604539
last_lsn = 1605623
compact = 0
再次修改一次数据,这次修改没有做备份
MariaDB[hellodb]> insert into tb1 values (88888);
MariaDB[hellodb]> select * from tb1;
+-------+
|id |
+-------+
| 1 |
| 2 |
| 3 |
| 23 |
| 1000 |
| 9000 |
|88888 |
+-------+