本章节摘选自Percona官网。
Percona XtraBackup is an open-source hot backup utility for MySQL - based servers that doesn’t lock your database during the backup.
Whether it is a 24x7 highly loaded server or a low-transaction-volume environment, Percona XtraBackup is designed to make backups a seamless procedure without disrupting the performance of the server in a production environment.
Percona XtraBackup can back up data from InnoDB, XtraDB, MyISAM, and MyRocks tables on MySQL 8.0 servers as well as Percona Server for MySQL with XtraDB, Percona Server for MySQL 8.0, and Percona XtraDB Cluster 8.0.
Percona XtraBackup是基于MySQL服务器的开源热备份程序,在备份过程中不会锁定数据库。
无论是24x7高负载服务器还是低事务量环境,Percona XtraBackup都能在不影响生产环境服务器性能的前提下完成备份过程。
Percona XtraBackup可以备份InnoDB,XtraDB, MyISAM等引擎的数据,并且支持备份MyRocks tables类型的数据。
注意:版本8.0.6后才添加了对MyRocks存储引擎的支持,Percona XtraBackup 8.0还不支持TokuDB存储引擎。
Percona XtraBackup 8.0 does not support making backups of databases created in versions prior to 8.0 of MySQL, Percona Server for MySQL or Percona XtraDB Cluster. As the changes that MySQL 8.0 introduced in data dictionaries, redo log and undo log are incompatible with previous versions, it is currently impossible for Percona XtraBackup 8.0 to also support versions prior to 8.0.
Percona XtraBackup 8.0 不支持 8.0之前的版本的MySQL 、Percona Server for MySQL或 Percona XtraDB Cluster。
MySQL 8.0在redo日志和undo日志中引入的更改与以前的版本不兼容,因此Percona XtraBackup 8.0目前不支持8.0之前的版本。
本文实验环境MySQL版本为5.7,根据兼容性提示,备份工具我们选用Percona XtraBackup* 2.4。官网文档地址
Percona XtraBackup2.4特性
Percona XtraBackup is the world’s only open-source, free MySQL hot backup software that performs non-blocking backups for InnoDB and XtraDB databases. With Percona XtraBackup, you can achieve the following benefits:
Backups that complete quickly and reliably
Uninterrupted transaction processing during backups
Savings on disk space and network bandwidth
Automatic backup verification
Higher uptime due to faster restore time
Percona XtraBackup是一款唯一的开源的、免费MySQL热备软件,能够InnoDB和XtraDB 数据库完成非阻塞备份。
使用Percona XtraBackup,您可以获得以下好处:
快速可靠地完成备份
备份期间不间断的事务处理
节省磁盘空间和网络带宽
自动备份验证
更快的恢复时间,提升正常运行时间
Percona XtraBackup提供以下功能:
创建InnoDB热备份而不会暂停数据库
进行MySQL的增量备份
将压缩的MySQL备份流式传输到另一台服务器
在线在MySQL服务器之间移动表
轻松创建新的MySQL复制副本
备份MySQL而不增加服务器负载
Percona XtraBackup备份原理
Percona XtraBackup基于InnoDB的故障恢复(crash-recovery )功能。
它会复制InnoDB数据文件,从而导致数据内部不一致;但随后它将对文件执行故障恢复,使其再次成为一致的可用数据库。
因为InnoDB维护redo日志,也称为事务日志。它包含对InnoDB数据的每次更改的记录。
当InnoDB 启动时,它将检查并执行数据文件和事务日志。
将已提交的事务日志条目应用于数据文件,并对已修改数据但未提交的所有事务执行撤消(undo)操作。
Percona XtraBackup的工作方式是在启动时记住事务日志序列号(LSN),然后复制数据文件。
如果文件正在更改,则它们会在不同的时间点反映数据库的状态。
同时,Percona XtraBackup运行一个后台进程监视事务日志文件,并从中复制更改的数据。
如果服务器提供了备份锁(如:Percona Server for MySQL 5.6+)的特性,Percona XtraBackup将使用备份锁(Percona Server for MySQL 5.6+中提供了此功能)替代FLUSH TABLES WITH READ LOCK(FTWRL全局读锁)
。
Percona XtraBackup使用备份锁自动复制非InnoDB数据,以避免阻止修改InnoDB表的DML(数据操纵语言)查询。
当服务器支持备份锁时,xtrabackup将首先复制InnoDB数据,运行 LOCK TABLES FOR BACKUP(备份锁)
并复制MyISAM表和文件。
完成上一步的此操作后,然后进行InnoDB文件备份(.frm
,.MRG
,.MYD
,.MYI
,.TRG
,.TRN
, .ARM
,.ARZ
,.CSM
,.CSV
,.par
和 .opt
等格式文件)。
然后xtrabackup将使用LOCK BINLOG FOR BACKUP(binlog-lock的共享锁)
阻止可能发生变化的二进制日志位置(或者通过SHOW MASTER/SLAVE STATUS
获取Exec_Master_Log_Pos
操作 或者Exec_Gtid_Set
操作)。
然后,xtrabackup将完成REDO日志文件的复制,并获取二进制日志坐标。
完成上述操作后,xtrabackup`将解锁二进制日志和表。
Exec_Master_Log_Pos记录的是SQL thread执行到master binlog的文件和位置
GTID即全局事务ID
最后,通过STDERR(标准输出)
将二进制日志位置进行输出,如果一切正常xtrabackup 将退出并返回0。
Percona XtraBackup增量备份原理
xtrabackup工具支持增量备份,可以在每个完整备份之间执行许多增量备份,
可以选择按需要配置备份间隔,例如每周一次完整备份和每天增量备份,或者每天完整备份和每小时增量备份。
增量备份的原理是基于InnoDB页面的日志序列号或LSN(事务日志序列号)
。
LSN
是整个数据库系统的版本号。每个页面的LSN
都包含了最近的更改时间。
增量备份复制相较于先前的增量或完全备份的LSN
之后更新的每个页面。
有两种算法用于查找要复制的此类页面集。
第一个通过读取所有数据页直接检查LSN
页,该方式可用于所有服务器类型和版本。
Percona Server for MySQL提供的第二个方式,通过启用已更改的页面跟踪功能,在更改页面时记录下来。然后将这些信息写在一个位图文件中。
xtrabackup使用位图文件来读取增量备份所需的数据页。
如果xtrabackup找到位图文件,则默认情况下启用后一种算法。
即使位图数据可用,也可以通过变量(xtrabackup --incremental-force-scan
)指定扫描所有页面。
Percona XtraBackup恢复原理
xtrabackup可以通过使用xtrabackup --copy-back
或xtrabackup --move-back
来完成备份恢复工作。
xtrabackup将从my.cnf
读取datadir
, innodb_data_home_dir
,innodb_data_file_path
, innodb_log_group_home_dir
变量并检查目录是否存在。
首先复制的MyISAM表,索引等文件,接下来再复制InnoDB的表和索引,最后是日志文件。
在复制文件时,它将保留文件的属性,因为它们由创建备份的用户拥有,所以可能需要在启动数据库之前将文件的所有权更改mysql
,。
使用xtrabackup --move-back
选项还原备份,类似于xtrabackup --copy-back
, 唯一的区别在于,它不是复制文件,而是将文件移动到目标位置。
由于xtrabackup --move-back
将删除备份文件,因此必须谨慎使用。
在没有足够的可用磁盘空间来容纳数据文件及其备份副本的情况下,此选项很有用。