目录

xtrabackup备份原理及流式备份应用

0. 参考文献

序号 文献
1 MariaDB/MySQL备份和恢复(三):xtrabackup用法和原理详述
2 MySQL · 物理备份 · Percona XtraBackup 备份原理
3 Streaming and Compressing Backups
4 How Percona XtraBackup Works
5 FLUSH TABLE WITH READ LOCK详解
6 为什么要使用FTWRL
7 使用tar+pigz+ssh实现大数据的高效传输

xtrabackup 是一款开源的MySQL备份解决工具,由percona公司开发完成。相比于MySQL企业版的mysqlbackup 和ibbackup功能强大许多。尤其提供了当前部门需求的流式备份功能,因此在目前看来xtrabackup是一款非常合适的MySQL备份工具。本文将从xtrabackup备份的应用与原理角度介绍xtrabackup。

1. xtrabackup 安装

xtrabackup可以通过多种方式安装。本文在这里选择从https://www.percona.com/downloads/ 下载二进制包的方式安装。在网页中可以看到xtrabackup有4个版本可以选择。这4个版本分别支持MySQL不同的版本:

  1. 8.0 : MySQL 8.0 以上版本
  2. 2.4 : MySQL 5.7 版本
  3. 2.2 和 2.3 : MySQL 5.1, 5.5 和 5.6

当前线上使用的MySQL版本是5.7版本,因此本文所有的内容都是基于2.4版本生成的。如果读者对于8.0 有兴趣,可以阅读其文档:Percona XtraBackup - Documentation

下载下来的文件中,bin目录下会有如下的几个文件:

~/percona-xtrabackup-2.4.15-Linux-x86_64/bin$ ls -la total 211188 drwxr-xr-x 2 mysql mysql      4096 Oct 12 13:20 . drwxr-xr-x 6 mysql mysql      4096 Jul  5 16:00 .. lrwxrwxrwx 1 mysql mysql        10 Jul  5 16:00 innobackupex -> xtrabackup -rwxr-xr-x 1 mysql mysql   9811072 Jul  5 15:53 xbcloud -rwxr-xr-x 1 mysql mysql      3020 Jul  5 15:52 xbcloud_osenv -rwxr-xr-x 1 mysql mysql   5854168 Jul  5 15:53 xbcrypt -rwxr-xr-x 1 mysql mysql   5942024 Jul  5 15:53 xbstream -rwxr-xr-x 1 mysql mysql 194628336 Jul  5 15:59 xtrabackup
  1. xbcloud, xbcloud_osenv : 是xtrabackup新的高级特性云备份
  2. xbcrypt : 支持加密备份
  3. xbstream : 支持流式备份功能。可以将备份的内容打包并通过管道传递
  4. xtrabackup : 是备份功能的主程序
  5. innobackupex : 这个工具在之前的版本中是一个perl脚本,会调用xtrabackup这个二进制工具。从xtrabackup 2.3开始,该工具使用C语言进行了重写,当前它是xtabackup二进制工具的一个软连接,但是实际的使用方法却不同,并且在以后的版本中会删除该工具。

因为innobackupex在后续版本中已经不存在。因此本文将会主要介绍xtrabackup的备份恢复方法和原理。

2. xtrabackup 备份和恢复原理

对于xtrabackup备份和恢复数据的过程总体分为3个阶段:

  1. 备份(backup)
  2. 准备(prepare)
  3. 恢复(copy-back 或move-back)

2.1 备份阶段(backup)

对于MySQL的备份,在大部分的情况下需要完成以下两种类型的数据的备份:

  1. innodb 存储引擎数据的备份。
  2. 非事务引擎的数据备份,例如myisam 引擎数据的备份。

在备份的过程中数据库基本处于可读写的状态,因此在这期间需要对于变化的数据进行处理,以便在备份结束时获取正确的备份数据。基于上述的考虑xtrabackup备份的过程主要包括了以下的几个步骤:

  • 拷贝和监控redo log : 在起始时刻,xtrabackup会先获取MySQL当前时刻的LSN,同时开始