XtraBackup工具原理及安装(2)

在InnoDB中,每个page中都记录LSN信息,每当相关数据发生改变,page的LSN就会自动增加,XtraBackup的增量备份就是依据这一原理进行的。XtraBackup将上次备份(完全备份集或者也是一个增量备份集)以来LSN改变的page进行备份。

所以,要做增量备份第一次就要做一个完全备份(就是将MySQL实例或者说要备份的数据库表做一个完全复制,同时记录LSN),之后可以基于此进行增量备份以及恢复。

增量备份优点:

1)、数据库太大没有足够的空间全量备份,增量备份能有效节省空间,并且效率高;

2)、支持热备份,备份过程不锁表(针对InnoDB而言),不阻塞数据库的读写;

3)、每日备份只产生少量数据,也可采用远程备份,节省本地空间;

4)、备份恢复基于文件操作,降低直接对数据库操作风险;

5)、备份效率更高,恢复效率更高。

恢复与还原

backup的恢复过程中包括恢复和还原两个部分。

我们前面已经说了XtraBackup只备份InnoDB表的ibd文件,而innobackupex可以备份包括InnoDB表在内的其他存储引擎的表的所有数据文件。由于不同引擎表备份时的不同,也会让恢复过程看起来不一样。

先来看看完全备份集的恢复。

在InnoDB表的备份或者更直接的说ibd数据文件复制的过程中,数据库处于不一致的状态,所以要将xtraback_logfile中尚未提交的事务进行回滚,以及将已经提交的事务进行前滚,使各个数据文件处于一个一致性状态,这个过程叫做“准备(prepare)”。

如果你是在一个从库上执行的备份,那说明你没有东西需要回滚,只是简单的apply redo log就可以了。另外在prepare过程中可以使用参数--use-memory增大使用系统内存量从而提高恢复速度。

之后,我们就可以根据backup-my.cnf中的配置把数据文件复制回对应的目录了,当然你也可以自己复制回去,但innobackupex都会帮我们完成。在这里,对于InnoDB表来说是完成“后准备”动作,我们称之为“恢复(recovery)”,而对于MyISAM表来说由于备份时是采用锁表方式复制的,所以此时只是简单的复制回来,不需要apply log,这个我们称之为“还原(restore)”。

注:本文档里之所以使用恢复和还原,也是和其他数据库比如Oracle看起来一样。

对于增量备份的恢复过程,与完全备份集的恢复类似,只是有少许不同:

1)、恢复过程需要使用完全备份集和各个增量备份集,各个备份集的恢复与前面说的一样(前滚和回滚),之后各个增量备份集的redo log都会应用到完全备份集中;

2)、对于完全备机集之后产生的新表,要有特殊处理方式,以便恢复后不丢表;

3)、要以完全备份集为基础,然后按顺序应用各个增量备份集。

流备份和压缩

提到流备份(streaming)就要说远程备份和备份压缩,先说流备份吧。

流备份是指备份的数据通过标准输出STDOUT传输给tar程序进行归档,而不是单纯的将数据文件保存到指定的备份目录中,参数--stream=tar表示开启流备份功能并打包。同时也可以利用流备份到远程服务器上。

举例来说,

$ innobackupex --stream=TAR ${BACKUP_DIR}/base | gzip > ${BACKUP_DIR}/base.tar.gz $ innobackupex --stream=TAR ${BACKUP_DIR}/base|ssh somebackupaddr “cat > ${DIR}/base.tar”

当然了,如果你使用了流备份,那么增量备份也就不能用了,因为增量备份需要参考次备份情况,而上次备份却被打包或者压缩了。

在我们现实使用中,更多的使用增量备份,至于归档压缩我们可以通过脚本自主完成。

部分备份和恢复

XtraBackup可以只备份/恢复部分库表,可以正则模式匹配或者是你想备份库表的列表,但InnoDB表必须是独立表空间,同时不能使用流备份功能。

1)、使用正则模式匹配备份部分库表,需要使用参数--include,语句类似如下:

$ innobackupex --include=’^qb.*’ ${BACKUP_DIR}/part-base

2)、使用数据库列表备份部分库,需要使用参数--databases,语句类似如下:

$ innobackupex --databases=qb0 qb1 qb2 qb3 ${BACKUP_DIR}/part-base

3) 、使用表列表备份部分表,需要使用参数--tables-file,语句类似如下:

$ innobackupex --tables-list=${CONF_DIR}/tab.conf ${BACKUP_DIR}/part-base

注:在我们的现实应用中,很少会只备份集群中部分库表,所以只是了解此功能即可,若有现实需要可以参考percona官方资料以获取更多信息。

能备份部分库表,也就能根据完全备份集进行部分库表的恢复,在现实中很少会用到,但还是说一下吧。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/57d19898a513fa3e17533e69ba39dd3a.html