2019-05-05 MySQL物理备份工具Xtrabackup应用实践(1)

1. Xtrabackup介绍

Xtrabackup是Percona公司专门针对MySQL数据库开发的一款开源免费的物理备份(热备)工具,可以对InnoDB和XtraDB等事务引擎的数据库实现非阻塞(即不锁表)方式的备份,也可以针对MyISAM等非事务引擎实现锁表方式备份。
Xtrabackup的主要特点如下:

  • 直接复制物理文件,备份和恢复数据的速度非常快,安全可靠
  • 在备份期间执行的事务不会间断,备份InnoDB数据不会影响业务
  • 备份期间不会增加太多数据库的性能压力
  • 支持对备份的数据进行自动校验
  • 支持全量、增量、压缩备份及流备份
  • 支持在线迁移表以及快速创建新的从库
  • 支持几乎所有版本的MySQL和MariaDB

2. Xtrabackup备份涉及的数据库名词

1. MySQL数据库文件扩展名知识说明

Xtrabackup备份中涉及得一些数据库专业信息知识

2. 事务型引擎的ACID特性

在MySQL中,InnoDB和MariaDB中的XtraDB都是事务型引擎,事务型引擎的共同特征是具备事务的4个特性,这4个特性分别是:原子性(atomicity)、一致性(consistency)、隔离性(isolation)、持久性(durability),又称为ACID特性。

ACID特性说明

3.InnoDB引擎内部知识概念

InnoDB基础概念知识

4. InnoDB引擎内部知识结构图及说明

InnoDB的表空间分为共享表空间和独立表空间(推荐)两种,表空间里存放数据的最小单位是页,每个页的默认值为16KB;多个连续的页(默认是64个)组成一个区段;而多个区段和页构成一个段。初始时,InnoDB首先会为每个段分配32个页,之后根据实际需要再将区段分配给段,InnoDB可以一次性添加4个区给一个大的段,从而确保数据存储时能有一个良好的顺序性。

InnoDB引擎内部知识结构

5. InnoDB备份相关名词

InnoDB日志及Xtrabackup备份原理词汇

3. Xtrabackup备份的工作原理流程

1. Xtrabackup恢复的工作原理

Percona Xtrabackup软件是基于InnoDB等事务引擎自带的redo日志和undo日志功能来保持备份和恢复前后数据一致性的,从而确保数据库的数据安全可靠。在InnoDB引擎中存在一个redo日志(事务日志)功能。redo日志文件会存储每一个InnoDB表中的数据修改记录。当InnoDB数据库启动时,会检查数据文件和redo日志文件,将已经提交到事务日志(redo日志文件)中的信息应用(提交)到数据文件并保存,然后根据undo日志信息将修改过但没有提交的数据记录进行回滚(不提交到数据文件)。

2. Xtrabackup执行全备份的原理过程说明

当执行Xtrabackup程序开始备份时,Xtrabackup首先会记录当前redo日志的位置(即对应的LSN号),同时还会在后台启动一个进程持续监视redo日志文件的变化,并将变化的信息都记录到xtrabackup_logfile中,之后就会针对所有的InnoDB数据文件进行备份(复制),待InnoDB数据文件备份完成之后,再执行“flush tables with read lock”命令对整个数据库锁表,然后备份(复制)MyISAM等非事务引擎的数据文件。待数据文件全部(包括InnoDB、MyISAM数据文件和redo日志数据记录)都备份完毕之后,获取binlog二进制日志位置点信息,最后执行unlock tables解锁命令,恢复整个数据库的可读写状态。
备份过程的原理如图所示:

Innobackupex全备份的原理流程1
Innobackupex全备份的原理流程2

3. Xtrabackup执行全备份恢复的过程

当执行Xtrabackup工具恢复数据时,要经过准备恢复和实际恢复两个步骤。在准备恢复过程结束后,InnoDB表的数据(即备份的物理文件)就恢复到了复制InnoDB文件结束时的时间点,这个时间点也是全库锁表复制MyISAM引擎数据时的起点,所以最终恢复的数据和数据库的数据是一致的。全备的数据有两部分,一部分是全备的物理文件,一部分是Xtrabackup log日志文件,整个恢复过程如图所示:

准备恢复的基本过程图

4. Xtrabackup执行增量备份的过程

Innobackupex增量备份的(仅对InnoDB引擎有效)核心就是复制全备之后的InnoDB中变更的“页”数据,复制时会以全备中xtrabackup_checkpoints文件对应的LSN号为依据,将大于给定的LSN号的页数据(就是增量数据)进行备份,因为要比对全备的LSN号,所以第一次增量备份是基于全备的,以后实施的每一次增量备份都要基于上一次的增量备份,最终实现备份的数据是连续的、无缺失的,针对MyISAM引擎的备份依然是锁表备份。
增量备份的过程具体如下:
首先在全备的xtrabackup_checkpoints logfile中找到并记录最后一个checkpoint(last checkpint LSN),然后从该LSN的位置开始复制InnoDB的redo日志到xtrabackup_logfile,增量备份的过程与全备份基本类似,区别就是第二步,仅复制InnoDB中变化的页数据,而非所有物理文件。

5. Xtrabackup执行增量恢复的过程

增量数据的恢复过程与全量备份的恢复过程类似,所不同的是增量恢复是以全备份数据为基础的,增量恢复的数据主要涉及全备的数据、增量的数据、Xtrabackup_log日志文件。恢复过程是先将增量备份中变化的页数据应用到全备数据中,然后,读取Xtrabackup_log应用redo数据到全备数据中,同时回滚未提交的事务,整个过程如图所示:

Xtrabackup执行增量恢复过程图解

你可能感兴趣的:(2019-05-05 MySQL物理备份工具Xtrabackup应用实践(1))