Percona XtraBackup 8.0的工作原理

Percona XtraBackup 8.0的工作原理

2023-08-21
Mysql, Percona, Xtrabackup

1.简介 #

Percona XtraBackup是开源、免费的 MySQL热备份软件,可对InnoDB和XtraDB数据库执行非阻塞备份。

使用Percona XtraBackup,有以下好处:

  • 快速可靠的完成备份
  • 备份过程中的事务处理不中断
  • 节省磁盘空间和网络带宽
  • 自动备份验证
  • 更快的恢复时间,提高可用性

Percona XtraBackup 可为所有版本的Percona Server for MySQL和MySQL进行热备份。它可以执行流式、压缩和增量的MySQL备份。

Percona XtraBackup 2.4支持MySQL和Percona Server for MySQL 5.6和5.7数据库。由于MySQL重做日志(redo log)和数据字典格式的更改,Percona XtraBackup 8.0.x版本仅与 MySQL 8.0.x、Percona Server for MySQL 8.0.x以及兼容版本兼容。

1.1 支持的存储引擎 #

Percona XtraBackup可以备份MySQL 8.0服务器上的InnoDB、XtraDB、MyISAM和MyRocks表的数据,以及Percona Server for MySQL与XtraDB、Percona Server for MySQL 8.0以及Percona XtraDB Cluster 8.0。

版本更新: 8.0.6版本及更高版本支持MyRocks存储引擎。在MyRocks存储引擎上的增量备份不会确定早期的完整或增量备份是否包含相同的文件。Percona XtraBackup每次进行备份时都会复制所有MyRocks文件。Percona XtraBackup不支持TokuDB存储引擎。

1.2 限制 #

Percona XtraBackup 8.0不支持对在MySQL、Percona Server for MySQL或Percona XtraDB Cluster的8.0版本之前创建的数据库进行备份。由于MySQL 8.0在数据字典、重做(redo)日志和撤消(undo)日志方面引入的更改与之前的版本不兼容,因此Percona XtraBackup 8.0目前无法支持8.0版本之前的版本。

由于Oracle在2020年4月底发布的MySQL 8.0.20中进行了更改,Percona XtraBackup 8.0在版本8.0.11之前与MySQL版本8.0.20或更高版本以及基于该版本的Percona产品(如Percona Server for MySQL和Percona XtraDB Cluster)不兼容。

有关更多信息,可查看Percona XtraBackup 8.x和MySQL 8.0.20

1.3 Percona XtraBackup功能特性 #

以下是Percona XtraBackup功能的简要列表:

  • 在不暂停数据库的情况下创建热备份的InnoDB备份
  • 对MySQL进行增量备份
  • 将压缩的MySQL备份流式传输到另一台服务器
  • 在线在MySQL服务器之间移动表
  • 轻松创建新的MySQL复制副本
  • 在不给服务器增加负载的情况下备份MySQL
  • Percona XtraBackup基于每秒IO操作的数量执行节流
  • Percona XtraBackup可以跳过次要索引页面,并在准备紧凑备份时重新创建它们
  • Percona XtraBackup可以从完整备份中导出单个表格,无论InnoDB版本如何
  • 备份锁是Percona Server中提供的FLUSH TABLES WITH READ LOCK的轻量级替代方案。Percona XtraBackup会自动使用它们来复制非InnoDB数据,以避免阻塞修改InnoDB表格的DML查询。

1.4 Percona XtraBackup的版本与MySQL的赌赢关系 #

8.0.34-29
基础版本次要构建版本

Percona采用语义化版本编号,遵循基础版本和构建版本的模式。Percona为每个版本发布分配唯一的非负整数,按递增顺序分配。版本号结合了基础MySQL 8.0版本号和次要构建版本。

注意,在8.0.14版本之后,Percona XtraBackup的编号发生了变化,以使其版本与Percona Server和MySQL保持一致。在博文“Aligning Percona XtraBackup Versions with Percona Server for MySQL”中可以找到更多信息。

Percona XtraBackup 8.0.304-29的版本号定义了以下信息:

基础版本 - 最左边的数字表示所使用的基础MySQL 8.0版本。增加基础版本会将次要构建版本重置为0。

次要构建版本 - 内部编号,表示软件版本。每次发布Percona XtraBackup时,构建版本都会增加一次。

Percona XtraBackup 8.0.34-28和8.0.34-29是基于MySQL 8.0.34的多个版本。

2. Percona XtraBackup的工作原理 #

2.1 备份原理 #

Percona XtraBackup基于InnoDB的崩溃恢复(crash-recovery)功能。它复制您的InnoDB数据文件,导致数据在内部不一致;然后它在这些文件上执行崩溃恢复操作,使它们再次成为一致且可用的数据库。

这个过程有效的原因是因为InnoDB维护着一个重做日志(redo log),也称为事务日志(transaction log)。它包含了对InnoDB数据的每次更改记录。当InnoDB启动时,它会检查数据文件和事务日志,并执行两个步骤。首先,它将已提交的事务日志条目应用到数据文件上,然后对于任何修改了数据但未提交的事务,它会执行一个撤消操作(undo operation)。

Percona XtraBackup 8.0.30-23引入了--register-redo-log-consumer参数。--register-redo-log-consumer参数默认为禁用状态。当启用时,此参数允许Percona XtraBackup在备份开始时注册为一个重做日志消费者。服务器不会移除Percona XtraBackup(消费者)尚未复制的重做日志。消费者读取重做日志并手动提升日志序列号(LSN)。在此过程中,服务器阻止写入操作。基于重做日志的消耗,服务器决定何时可以清理日志。

Percona XtraBackup的工作方式是在启动时记住LSN,然后将数据文件复制到其他位置。这个过程需要一些时间,因此如果文件正在变化,它们会在不同的时间点反映数据库的状态。与此同时,Percona XtraBackup会运行一个后台进程,监视事务日志文件,并从中复制更改。Percona XtraBackup需要不断执行此操作,因为事务日志以循环方式写入,并在一段时间后可能会被重新使用。自从它开始执行以来,Percona XtraBackup需要事务日志记录来记录数据文件的每次更改。

Percona XtraBackup使用备份锁(Backup locks)

在可用的情况下,作为FLUSH TABLES WITH READ LOCK的轻量级替代方案。此功能在Percona Server for MySQL 5.6+中可用。MySQL 8.0允许通过LOCK INSTANCE FOR BACKUP语句获取实例级备份锁。

仅在Percona XtraBackup完成对所有InnoDB/XtraDB数据和日志的备份后,才会对MyISAM和其他非InnoDB表进行锁定。Percona XtraBackup会自动使用这个功能来复制非InnoDB数据,以避免阻塞修改InnoDB表的DML查询。

需要BACKUP_ADMIN特权才能查询performance_schema_log_status,无论是用于LOCK INSTANCE FOR BACKUP还是LOCK TABLES FOR BACKUP

xtrabackup在实例仅包含InnoDB表时,试图避免使用备份锁和FLUSH TABLES WITH READ LOCK。在这种情况下,xtrabackup从performance_schema.log_status获取二进制日志坐标。当使用--slave-info选项启动xtrabackup时,在MySQL 8.0中仍然需要FLUSH TABLES WITH READ LOCK。Percona Server for MySQL 8.0中的log_status表已扩展以包括中继日志坐标,因此即使使用--slave-info选项,也不需要锁定。

可查看MySQL Documentation: LOCK INSTANCE FOR BACKUP

当服务器支持备份锁时,xtrabackup首先复制InnoDB数据,然后运行LOCK TABLES FOR BACKUP,然后复制MyISAM表。完成这些操作后,将开始备份文件。它将备份.frm.MRG.MYD.MYI.CSM.CSV.sdi.par文件。

之后,xtrabackup将使用LOCK BINLOG FOR BACKUP来阻止可能改变二进制日志位置、Exec_Master_Log_PosExec_Gtid_Set的所有操作(即对应于复制副本上当前SQL线程状态的源二进制日志坐标),如SHOW MASTER/SLAVE STATUS所报告的。然后,xtrabackup将完成复制REDO日志文件并获取二进制日志坐标。完成后,xtrabackup将解锁二进制日志和表。

最后,二进制日志位置将打印到标准错误流(STDERR),如果一切顺利,xtrabackup将返回0退出。

请注意,xtrabackup的标准错误流(STDERR)不会写入任何文件。您需要将其重定向到文件中,例如 xtrabackup OPTIONS 2> backupout.log

它还将在备份目录中创建以下文件。

在准备阶段,Percona XtraBackup使用复制的事务日志文件对复制的数据文件执行崩溃恢复。完成后,数据库准备好可以进行还原和使用。

备份的MyISAM和InnoDB表最终将保持一致,因为在准备(恢复)过程之后,InnoDB的数据向前滚动到备份完成的点,而不是回滚到它开始的点。这个时间点与执行FLUSH TABLES WITH READ LOCK时的时间相匹配,因此MyISAM数据和准备好的InnoDB数据是同步的。

xtrabackup提供了许多在前面解释中没有提到的功能。简而言之,这些工具使您能够使用各种数据文件、日志文件复制和将日志应用于数据的组合来执行流式传输和增量备份等操作。

2.2 恢复备份 #

要使用xtrabackup恢复备份,可以使用--copy-back--move-back选项。

xtrabackup将从my.cnf中读取datadirinnodb_data_home_dirinnodb_data_file_pathinnodb_log_group_home_dir等变量,并检查这些目录是否存在。

它将首先复制MyISAM表、索引等(.MRG.MYD.MYI.CSM.CSV.sdi.par文件),然后是InnoDB表和索引,最后是日志文件。在复制文件时,它将保留文件的属性,您可能需要在启动数据库服务器之前将文件的所有权更改为mysql,因为它们的所有权将归属于创建备份的用户。

另外,--move-back选项可以用于恢复备份。此选项类似于--copy-back,唯一的区别是它不是复制文件,而是将它们移动到目标位置。由于此选项会删除备份文件,因此必须小心使用。当没有足够的可用磁盘空间来容纳数据文件和它们的备份副本时,此选项非常有用。

参考 #

© 2024 青蛙小白