1,完全备份使用innobackupex进行增量备份(相当于上一次数据增量,上一次数据后变化的数据)
通常,我们在恢复完成后会立刻进行一次全备
。[root@mysql-master mybackups]# innobackupex --user=root /mybackups/
drwxr-xr-x. 6 root root 4096 Jan 26 01:32 2016-01-26_01-32-33
模拟插入数据在hellodb中添加数据 MariaDB [hellodb]> CREATE TABLE t1 (id int);
Query OK, 0 rows affected (0.04 sec)
在hellodb中添加数据 MariaDB [hellodb]> insert into t1 values (1),(2);
Query OK, 2 rows affected (0.00 sec)Records: 2 Duplicates: 0 Warnings: 0
2,增量备份1
[root@mysql-master mybackups]# innobackupex --incremental /mybackups/ --incremental-basedir=/mybackups/2016-01-26_01-32-33/
drwxr-xr-x. 6 root root 4096 Jan 26 01:39 2016-01-26_01-38-59
PS
每个InnoDB的页面都会包含一个LSN信息,每当相关的数据发生改变,相关的页面的LSN就会自动增长。这正是InnoDB表可以进行增量备份的基础,即innobackupex通过备份上次完全备份之后发生改变的页面来实现。要实现第一次增量备份,可以使用下面的命令进行:
innobackupex --incremental /backup --incremental-basedir=BASEDIR
模拟再次插入数据
[root@mysql-master 2016-01-25_23-12-12]# mysqlWelcome to the MariaDB monitor. Commands end with ; or g.Your MariaDB connection id is 6Server version: 5.5.44-MariaDB-log Source distribution
Copyright (c) 2000, 2015, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or 'h' for help. Type 'c' to clear the current input statement.
创建表MariaDB [(none)]> CREATE DATABASE linuxea;
Query OK, 1 row affected (0.00 sec)
当前表MariaDB [(none)]> use linuxea;
Database changed
创建TABLES MariaDB [linuxea]> CREATE TABLE linuxea (Name Char(10));
Query OK, 0 rows affected (0.02 sec)
3,增量备份2
[root@mysql-master mybackups]# innobackupex --incremental /mybackups/ --incremental-basedir=/mybackups/2016-01-26_01-38-59/
drwxr-xr-x. 7 root root 4096 Jan 26 01:40 2016-01-26_01-40-51
查看/xtrabackup_checkpoints单元号[root@mysql-master ]# cat /mybackups/2016-01-26_01-32-33/xtrabackup_checkpoints
backup_type = full-backuped
from_lsn = 0
to_lsn = 1634625
last_lsn = 1634625
compact = 0[root@mysql-master ]# cat /mybackups/2016-01-26_01-38-59/xtrabackup_checkpoints
backup_type = incrementalfrom_lsn = 1634625
to_lsn = 1640142
last_lsn = 1640142
compact = 0[root@mysql-master ]# cat /mybackups/2016-01-26_01-40-51/xtrabackup_checkpoints
backup_type = incremental
from_lsn = 1640142
to_lsn = 1643800
last_lsn = 1643800
compact = 0[root@mysql-master 2016-01-26_01-32-33]#
模拟一次故障
[root@mysql-master data]# service mysqld stop
Shutting down MySQL. SUCCESS!
[root@mysql-master data]# rm -rf *
故障发生后的恢复1,完全备份恢复
如: innobackupex --apply-log --redo-only /mybackups/2016-01-26_01-32-33/
2,增量备份的恢复(用完全备份加上增量1)在完全备份之上--incremental-dir
`增量备份1`
如:innobackupex --apply-log --redo-only /mybackups/2016-01-26_01-32-33/ --incremental-dir=/mybackups/2016-01-26_01-38-59/
3,增量备份的恢复,在完全备份之上恢复上次增量后的完全备份进行恢复--incremental-dir
`增量备份`
如:innobackupex --apply-log --redo-only /mybackups/2016-01-26_01-32-33/ --incremental-dir=/mybackups/2016-01-26_01-40-51/
在查看下单元号是否对应[root@mysql-master ]# cat /mybackups/2016-01-26_01-32-33/xtrabackup_checkpoints
backup_type = full-prepared
from_lsn = 0to_lsn = 1643800
last_lsn = 1643800
compact = 0[root@mysql-master ]#
如果没错,则进行恢复
[root@mysql-master mydata]# innobackupex --copy-back /mybackups/2016-01-26_01-32-33/
恢复后修改权限,启动即可[root@mysql-master data]# chown -R mysql.mysql ./*
[root@mysql-master data]# service mysqld start
Starting MySQL.. SUCCESS!
[root@mysql-master data]# mysql
Welcome to the MariaDB monitor. Commands end with ; or g.
Your MariaDB connection id is 2
Server version: 5.5.40-MariaDB-log MariaDB Server
Copyright (c) 2000, 2014, Oracle, Monty Program Ab and others.
Type 'help;' or 'h' for help. Type 'c' to clear the current input statement.
MariaDB [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| hellodb |
| linuxea |
| mysql |
| performance_schema |
| test |
+--------------------+
6 rows in set (0.00 sec)
MariaDB [(none)]>
PS:如果此时没有做增量备份,且数据丢失,则可以使用二进制恢复,单元号可选最后一次增量备份文件中的xtrabackup_binlog_info
[root@mysql-master 2016-01-25_23-44-28]# cat xtrabackup_binlog_info
master-bin.000005 719
[root@mysql-master 2016-01-25_23-44-28]#
innobackupex --incremental /backup --incremental-basedir=BASEDIR
其中,BASEDIR指的是完全备份所在的目录,此命令执行结束后,innobackupex命令会在/backup目录中创建一个新的以时间命名的目录以存放所有的增量备份数据。另外,在执行过增量备份之后再一次进行增量备份时,其--incremental-basedir应该指向上一次的增量备份所在的目录。
需要注意的是,增量备份仅能应用于InnoDB或XtraDB表,对于MyISAM表而言,执行增量备份时其实进行的是完全备份。
“准备”(prepare)增量备份与整理完全备份有着一些不同,尤其要注意的是:(1)需要在每个备份(包括完全和各个增量备份)上,将已经提交的事务进行“重放”。“重放”之后,所有的备份数据将合并到完全备份上。(2)基于所有的备份将未提交的事务进行“回滚”。
于是,操作就变成了:
innobackupex --apply-log --redo-only BASE-DIR
接着执行:
innobackupex --apply-log --redo-only BASE-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指的是第二次增量备份的目录,其它依次类推,即如果有多次增量备份,每一次都要执行如上操作;