副标题[/!--empirenews.page--]
《MySQL 系列连载之 XtraBackup 增量热备 or 恢复实践(3)》要点: 本文介绍了MySQL 系列连载之 XtraBackup 增量热备 or 恢复实践(3),希望对您有用。如果有疑问,可以联系我们。
导读
如果您在本文遇到任何问题或疑问请到QQ群中与我们交流.也可在下方进行评论.我将在第一时间和您进行交流,共同学习.
QQ群:201777608、526871767、1689067(加群时注明:运维派)
增量备份和恢复
特别注意:
innobackupex 增量备份仅针对InnoDB这类支持事务的引擎,对于MyISAM等引擎,则仍然是全备.
1)增量备份操作
增量备份需要基于全量备份
先假设我们已经有了一个全量备份(如上面的/backup/mysql/data/2017-04-04_16-56-35),我们需要在该全量备份的基础上做第一次增量备份.
[root@master ~]# innobackupex –defaults-file=/etc/my.cnf –user=root –incremental-basedir=/backup/mysql/data/2017-04-04_16-56-35/ –incremental /backup/mysql/data
其中:
–incremental-basedir 指向全量备份目录 –incremental 指向增量备份的目录
上面语句执行成功之后,会在–incremental执行的目录下创建一个时间戳子目录(本例中为:/backup/mysql/data/2017-04-04_14-37-24),在该目录下存放着增量备份的所有文件.
[root@master data]# ll
总用量 8
drwxr-xr-x 6 root root 4096 4月 4 16:56 2017-04-04_16-56-35 //全量备份目录
drwxr-xr-x 6 root root 4096 4月 4 16:59 2017-04-04_16-58-58 //增量备份目录
在备份目录下,有一个文件xtrabackup_checkpoints记录着备份信息,其中可以查出
1)全量备份的信息如下:
[root@master data]# cd /backup/mysql/data/2017-04-04_16-56-35/
[root@master 2017-04-04_16-56-35]# cat xtrabackup_checkpoints
backup_type = full-backuped
from_lsn = 0
to_lsn = 1639436
last_lsn = 1639436
compact = 0
2)基于以上全量备份的增量备份的信息如下:
[root@master data]# cd /backup/mysql/data/2017-04-04_16-58-58/
[root@master 2017-04-04_16-58-58]# cat xtrabackup_checkpoints
backup_type = incremental
from_lsn = 1639436
to_lsn = 1639436
last_lsn = 1639436
compact = 0
从上面可以看出,增量备份的from_lsn正好等于全备的to_lsn.
那么,我们是否可以在增量备份的基础上再做增量备份呢?
答案是肯定的,只要把–incremental-basedir执行上一次增量备份的目录即可,如下所示:
[root@master data]# innobackupex –defaults-file=/etc/my.cnf –user=root –incremental-basedir=/backup/mysql/data/2017-04-04_16-58-58/ –incremental /backup/mysql/data
[root@master ~]# ll /backup/mysql/data/
总用量 12
drwxr-xr-x 6 root root 4096 4月 4 16:56 2017-04-04_16-56-35 //全量备份目录
drwxr-xr-x 6 root root 4096 4月 4 16:59 2017-04-04_16-58-58 //增量备份目录1
drwxr-xr-x 6 root root 4096 4月 4 17:02 2017-04-04_17-02-35 //增量备份目录2
它的trabackup_checkpoints记录着备份信息如下:
[root@master ~]# cd /backup/mysql/data/2017-04-04_17-02-35/
[root@master 2017-04-04_17-02-35]# cat xtrabackup_checkpoints
backup_type = incremental
from_lsn = 1639436
to_lsn = 1639436
last_lsn = 1639436
compact = 0
可以看到,第二次增量备份的from_lsn是从上一次增量备份的to_lsn开始的
2)增量备份后的恢复操作
增量备份的恢复要比全量备份复杂很多,增量备份与全量备份有着一些不同,尤其要注意的是:
1)需要在每个备份(包括完全和各个增量备份)上,将已经提交的事务进行“重放”.“重放”之后,所有的备份数据将合并到完全备份上.
2)基于所有的备份将未提交的事务进行“回滚”.于是,操作就变成了:不能回滚,因为有可能第一次备份时候没提交,在增量中已经成功提交
第一步是在所有备份目录下重做已提交的日志(注意备份目录路径要跟全路径)
其中:
一定要全路径
BASE-DIR 是指全量备份的目录
INCREMENTAL-DIR-1 是指第一次增量备份的目录
INCREMENTAL-DIR-2 是指第二次增量备份的目录,以此类推.
这里要注意的是:
1)最后一步的增量备份并没有–redo-only选项!回滚进行崩溃恢复过程
2)可以使用–use_memory提高性能.
3)以上语句执行成功之后,最终数据在BASE-DIR(即全量目录)下,其实增量备份就是把增量目录下的数据,整合到全变量目录下,然后在进行,全数据量的还原.
第一步完成之后,我们开始下面关键的第二步,即拷贝文件,进行全部还原!注意:必须先停止mysql数据库,然后清空数据库目录(这里是指/data/mysql/data)下的文件.
4)innobackupex –copy-back BASE-DIR
同样地,拷贝结束之后,记得检查下数据目录(这里指/data/mysql/data)的权限是否正确(修改成mysql:mysql),然后再重启mysql.
接下来进行案例说明:
假设我们已经有了一个全量备份2017-04-04_16-56-35 删除在上面测试创建的两个增量备份
[root@master ~]# cd /backup/mysql/data/
[root@master data]# ll
drwxr-xr-x 6 root root 4096 4月 4 17:08 2017-04-04_16-56-35
drwxr-xr-x 6 root root 4096 4月 4 17:08 2017-04-04_16-58-58
drwxr-xr-x 6 root root 4096 4月 4 17:08 2017-04-04_17-02-35
[root@master data]# rm -fr 2017-04-04_16-58-58 2017-04-04_17-02-35
[root@master data]# ll
drwxr-xr-x 6 root root 4096 4月 4 17:08 2017-04-04_16-56-35
假设在全量备份后,mysql数据库中又有新数据写入
#进入数据库
[root@master data]# mysql
#创建一个叫做 ceshi 的数据库
mysql> create database ceshi;
Query OK,1 row affected (0.00 sec)
#切换到 ceshi 库下
mysql> use ceshi
Database changed
#创建一个叫做 test1 的表
mysql> create table test1(
-> id int3,
-> name varchar(20)
-> );
Query OK,0 rows affected (0.26 sec)
#往test1表中插入数据
mysql> insert into test1 values(1,”chenbaojia”);
Query OK,1 row affected (0.05 sec)
(编辑:源码门户网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|