percona xtrabackup增量备份和恢复

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]# mysql
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 6
Server 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 =
to_lsn = 1634625
last_lsn = 1634625
compact = 0
[root@mysql-master ]# cat /mybackups/2016-01-26_01-38-59/xtrabackup_checkpoints
backup_type = incremental
from_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 = 0
to_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指的是第二次增量备份的目录,其它依次类推,即如果有多次增量备份,每一次都要执行如上操作;

#######################################################################################

2 分享

您可以选择一种方式赞助本站

支付宝扫码赞助

支付宝扫码赞助

日期: 2016-01-27分类: Mariadb

标签: xtrabackup

发表评论

仅有一条评论

加载中,请稍候...
  1. 张孟军
    January 28th, 2016 at 12:40 pm

    超哥威武