加入收藏 | 设为首页 | 会员中心 | 我要投稿 东莞站长网 (https://www.0769zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 服务器 > 安全 > 正文

MySQL 系列连载之 XtraBackup 增量热备 or 恢复实践(3)

发布时间:2021-01-12 02:17:54 所属栏目:安全 来源:网络整理
导读:《MySQL 系列连载之 XtraBackup 增量热备 or 恢复实践(3)》要点: 本文介绍了MySQL 系列连载之 XtraBackup 增量热备 or 恢复实践(3),希望对您有用。如果有疑问,可以联系我们。 导读 如果您在本文遇到任何问题或疑问请到QQ群中与我们交流.也可在下方进
副标题[/!--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)

(编辑:东莞站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!