xtrabackup全备结合增备和恢复

增量备份和还原


增量备份是为了减少空间使用和备份的时间;增量备份的实现,依赖于innodb页上面的LSN(log sequence number),每次对数据库的修改都会导致LSN自增。增量备份会复制指定LSN之后的所有数据页。

创建增量备份

创建全备

在创建增量备份之前需要一个全备,不然增量备份是没有意义的,--no-timestamp选项不会在备份目录下面创建以时间命名的子文件夹

$ innobackupex  -H 127.0.0.1 -u root -p newpass -P 3306 -S /var/lib/mysql/mysql.sock /home/xtarback/fulldata
或者
$ innobackupex --host=127.0.0.1 --user=root --password=newpass --port=3306 \
--socket=/var/lib/mysql/mysql.sock /home/xtarback/fulldata

这样就会在/home/xtarback/fulldata/下创建一个时间戳文件夹,如 /home/xtarback/fulldata/2017-02-24_09-39-18,然后文件夹内是备份文件。

检查备份文件夹下的xtrabackup-checkpoints,会有一下信息:

[root@localhost 2017-02-24_09-39-18]# cat xtrabackup_checkpoints 
backup_type = full-backuped
from_lsn = 0
to_lsn = 3693629
last_lsn = 3693629
compact = 0
recover_binlog_info = 0
[root@localhost 2017-02-24_09-39-18]#

创建第一个增量备份

  • 增加一张incremental01的表sql如下
CREATE TABLE incremental01 (
    name VARCHAR(50) NULL DEFAULT NULL,
    tpye VARCHAR(50) NULL DEFAULT NULL,
    commond VARCHAR(600) NULL DEFAULT NULL
)
ENGINE=InnoDB
; 

增加如下数据
REPLACE INTO incremental01 (name, tpye, commond) VALUES ('incremental01', 'incremental', 'innobackupex --incremental -u root -p newpass /home/xtarback/incremental/ --incremental-basedir=/home/xtarback/fulldata/2017-02-24_09-39-18');

然后使用--incremental创建增量备份 --incremental-basedir=name --incremental-dir=name

$ innobackupex --incremental /home/xtarback/incremental/ --incremental-basedir=BASEDIR

[root@localhost 2017-02-24_09-39-18]# innobackupex --incremental -u root -p newpass \
 /home/xtarback/incremental/ --incremental-basedir=/home/xtarback/fulldata/2017-02-24_09-39-18

BASEDIR指向之前的全备, /home/xtarback/fulldata/2017-02-24_09-39-18,成功后备份会生成在/home/xtarback/incremental/下的时间戳目录中,如:/home/xtarback/incremental/2017-02-24_10-01-47 ,把这个目录叫为记为 INCREMENTAL-DIR-1方面之后使用。

然后查看xtrabackup-checkpoints:

[root@localhost 2017-02-24_10-01-47]# cat xtrabackup_checkpoints 
backup_type = incremental
from_lsn = 3693629
to_lsn = 3734903
last_lsn = 3734903
compact = 0
recover_binlog_info = 0
_#和全备的lsn对比发现,全备从0-3693629,而第一次增量备份是基于全备的,所有记录的lsn从3693629-3734903_
[root@localhost 2017-02-24_10-01-47]# cat /home/xtarback/fulldata/2017-02-24_09-39-18/xtrabackup_checkpoints 
backup_type = full-backuped
from_lsn = 0
to_lsn = 3693629
last_lsn = 3693629
compact = 0
recover_binlog_info = 0
[root@localhost 2017-02-24_10-01-47]#

可以发现和全备不同的是,backup_type为incremental,from_lsn不为0。

基于第一个增量备份创建第二个增量备份

在INCREMENTAL-DIR-1的基础上再创建一个增量备份,记为INCREMENTAL-DIR-2。

  • 增加incremental02表并输入数据
CREATE TABLE `incremental02` (
    `name` VARCHAR(50) NULL DEFAULT NULL,
    `tpye` VARCHAR(50) NULL DEFAULT NULL,
    `commond` VARCHAR(600) NULL DEFAULT NULL
)
ENGINE=InnoDB
; 

增加如下数据
REPLACE INTO incremental02 (name, tpye, commond) VALUES ('incremental02', 'incremental', 'innobackupex --incremental -u root -p newpass /home/xtarback/incremental/ --incremental-basedir=/home/xtarback/incremental/2017-02-24_10-01-47');

  • 第二次增量备份
    $ innobackupex --incremental /data/backups --incremental-basedir=INCREMENTAL-DIR-1
[root@localhost 2017-02-24_10-11-28]# innobackupex --incremental -u root -p newpass \
 /home/xtarback/incremental/ --incremental-basedir=/home/xtarback/incremental/2017-02-24_10-01-47

备份完成在/home/xtarback/incremental目录下面新增以时间戳的子目录如:/home/xtarback/incremental/2017-02-24_10-11-28
然后查看xtrabackup-checkpoints:

#第二次增备
[root@localhost 2017-02-24_10-11-28]# cat xtrabackup_checkpoints 
backup_type = incremental
from_lsn = 3734903
to_lsn = 3739279
last_lsn = 3739279
compact = 0
recover_binlog_info = 0
[root@localhost 2017-02-24_10-11-28]#
#第一次增备
[root@localhost 2017-02-24_10-01-47]# cat xtrabackup_checkpoints 
backup_type = incremental
from_lsn = 3693629
to_lsn = 3734903
last_lsn = 3734903
compact = 0
recover_binlog_info = 0
#全备
[root@localhost 2017-02-24_10-01-47]# cat /home/xtarback/fulldata/2017-02-24_09-39-18/xtrabackup_checkpoints 
backup_type = full-backuped
from_lsn = 0
to_lsn = 3693629
last_lsn = 3693629
compact = 0
recover_binlog_info = 0
[root@localhost 2017-02-24_10-01-47]#

增量备份替代方法

可以使用指定—incremental-lsn来代替—incremental-basedir的方法创建增量备份。

innobackupex --incremental /data/backups --incremental-lsn=3734903 #第一次增量备份时基于全备的last_lsn

innobackupex --incremental /data/backups --incremental-lsn=3693629 #第二次增量备份时基于第一次增备的last_lsn

注意:xtrabackup只会影响xtradb或者innodb的表,其他引擎的表在增量备份的时候只会复制整个文件,不会差异。

汇总信息

备份类型 备份目录 lsn范围
full-backuped /home/xtarback/fulldata/2017-02-24_09-39-18 0-3693629
incremental01 /home/xtarback/incremental/2017-02-24_10-01-47 3693629-3734903
incremental02 /home/xtarback/incremental/2017-02-24_10-11-28 3734903-3739279

预备增量备份

预备增量备份需要2个步骤:

1.需要先预备全备,但是只重做已提交事务,不回滚未提交事务,然后应用到全备,也是只重做已提交事务,不回滚未提交事务

2.回滚未提交事务

如果已经回滚了未提交事务,那么就无法再应用增量备份。

注:在mariadb 10.0 上测试发现不加—redo-only预备全备,然后使用 –redo-only应用增量备份,mysql服务能够正常启动并且数据被成功还原

在全备上,使用—redo-only只做已提交事务,不回滚未提交事务

innobackupex --apply-log --redo-only /home/xtarback/fulldata/2017-02-24_09-39-18

会出现以下结果:

InnoDB: Doing recovery: scanned up to log sequence number 3693629 (0%)

xtrabackup: starting shutdown with innodb_fast_shutdown = 1
InnoDB: Starting shutdown...
InnoDB: Shutdown completed; log sequence number 3693638
InnoDB: Number of pools: 1
170224 10:31:57 completed OK!

应用第一个增量备份

innobackupex --apply-log --redo-only /home/xtarback/fulldata/2017-02-24_09-39-18 --incremental-dir=/home/xtarback/incremental/2017-02-24_10-01-47
输出结果,注意LSN的变化: 全备下面的xtrabackup_checkpoints记录发生了改变
[root@localhost 2017-02-24_10-11-28]# cat /home/xtarback/fulldata/2017-02-24_09-39-18/xtrabackup_checkpoints
backup_type = log-applied
from_lsn = 0
to_lsn = 3734903
last_lsn = 3734903
compact = 0
recover_binlog_info = 0
综合之前的记录,全备的last_lsn从3693629变成了第一次增备的last_lsn 3734903
如果没有指定--incremental-dir,那么innobackupex会使用最近的一个在basedir中被创建的子目录。

应用另外一个备份

innobackupex --apply-log /home/xtarback/fulldata/2017-02-24_09-39-18 --incremental-dir=/home/xtarback/incremental/2017-02-24_10-11-28

InnoDB: Shutdown completed; log sequence number 3739823
170224 10:42:28 completed OK!
[root@localhost 2017-02-24_09-39-18]# cat xtrabackup_checkpoints 
backup_type = full-prepared
from_lsn = 0
to_lsn = 3739279
last_lsn = 3739279
compact = 0
recover_binlog_info = 0
[root@localhost 2017-02-24_09-39-18]#

因为是最后一个增量备份所以没有必要再加—redo-only,这样最后一个增量也被应用到全备上了。

注:--redo-only除了最后一个不用加之外,其他的增量应用都要加,最后一个应用的时候可以直接进入回滚未提交事务阶段。如果加了也没事儿,服务启动的时候会进入recovery过程,来回滚

需要注意的是,应用增量备份的时候只能按照备份的顺序来应用。如果应用顺序错误,那么备份就不可用。如果无法确定顺序,可以使用xtrabackup-checkpoints来确定顺序。

回滚未提交事务

当应用完所有增量备份的时候,就需要回滚所有未完成事务(如果最后一步加了 –redo-only就需要回滚未提交,不执行的话在服务启动阶段服务会处理未提交事务)。

innobackupex --apply-log /home/xtarback/fulldata/2017-02-24_09-39-18

Note that the iblog* files will not be created by innobackupex, if you want them to be created, use xtrabackup –prepareon the directory. Otherwise, the files will be created by the server once started.

注:

文中提到innodb事务日志(iblog)不会被创建,但是测试下使用了最后一步回滚未提交事务发现有iblog文件,而且上文提到 innobackupex会隐式执行两次 xtrabackup –prepare,在下文介绍xtrabackup时会提到,执行2次xtrabackup –preare会创建iblog*文件,与文中提到不符。

还原增量备份

  • 现在删除第一次增量备份和第二次增量备份的表执行还原操作
mysql> drop table incremental01;
Query OK, 0 rows affected (0.01 sec)

mysql> drop table incremental02;
Query OK, 0 rows affected (0.01 sec)

还原增量备份其实和还原全备一样

innobackupex --copy-back /home/xtarback/fulldata/2017-02-24_09-39-18

注意事项可以看:使用innobackupex还原备份

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,558评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,002评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,036评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,024评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,144评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,255评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,295评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,068评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,478评论 1 305
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,789评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,965评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,649评论 4 336
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,267评论 3 318
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,982评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,223评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,800评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,847评论 2 351

推荐阅读更多精彩内容