XtraBackup简介
XtraBackup是一款专为MySQL设计的开源、免费、高性能物理热备工具。它能在数据库持续运行、不阻塞业务读写的情况下,完成对InnoDB数据表的一致性备份。相对于其它备份工具,XtraBackup的主要优势包括:
- 在线热备且无阻塞:备份InnoDB表时无需加锁,完全不影响正在运行的事务;仅备份MyISAM等非事务引擎时,会短暂加全局读锁,通常耗时极短。
- 支持增量与差异备份:全量备份后,可仅备份自上次备份以来变化的数据页,大幅节省时间与存储空间,非常适合大型(> 50G)数据库的日常备份。
- 高效可靠:备份与恢复速度远高于mysqldump等逻辑备份,并且自动校验数据页完整性,备份文件可靠性高。
- 功能丰富:内置压缩与加密功能,节省空间并保障安全。支持将备份流通过管道输出,可直接压缩或发送至远程服务器,无需本地暂存。
全量备份与全量恢复
全量备份(Full Backup)是对整个数据库进行一次完整的备份,包括数据库中的所有数据和结构。全量备份提供了数据库的一个完整快照,包含了所有的数据和对象。
XtraBackup全量备份的流程如下:
- innobackupex开启xtrabackup_log监控线程,实时监测redolog文件的变化,将备份过程中新写入到事务日志中的日志拷贝至innobackup_log中。
- 开启xtrabackup拷贝线程,物理拷贝innodb的数据文件和系统表空间文件idbdata1至备份目录。
- 复制innodb文件结束后,执行命令:flush tables with read lock,全库锁表准备备份非InnoDB文件。
- 物理复制.frm、.myd、.myi等非InnoDB引擎文件至备份目录。
- 记录当前二进制日志文件及备份位置。
- 执行命令:unlock tables,将表解锁。
- 停止xtrabackup_log线程。
XtraBackup全量恢复的流程如下:
- 对全量备份文件xtrabackup_log进行日志回放,并对已提交的事务重做,对未提交的事务回滚。
- 将恢复的数据文件复制至mysql数据库的数据目录中。
增量备份与增量恢复
增量备份(Incremental Backup)是在全量备份的基础上,只备份自上次全量备份或增量备份以来发生改变的数据。
Xtrabackup增量备份与全量备份的过程类似,不同的是拷贝数据时只拷贝自上次innodb备份后变化的数据页,而不是所有数据。
XtraBackup增量恢复的流程如下:
- 恢复全量备份。
- 在全量备份的基础上顺序恢复所有的增量备份。
- 将所有全量与增量备份数据进行apply:回滚未提交事务,丢弃不完整数据,应用未完成事务。
- 将恢复的数据文件复制至mysql数据库的数据目录中。