XtraBackup2.4 备份恢复原理

文章目录

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

在这篇文章中,大家将会了解XtraBackup的原理,以对每次备份和恢复的过程都心里有数,保持敬畏之心。

XtraBackup是Percona公司开源的一款MySQL InnoDB(包括XtraDB,MyISAM)数据库备份工具,基于InnoDB的崩溃恢复功能,由于支持不锁表的在线物理热备而被广泛应用于生产环境。

当InnoDB 启动时,它会检查redo log事务日志并从中找到最后一次Checkpoint LSN的位置,由此开始,将日志逐条应用于数据文件,直到最新的LSN

mysql> show engine innodb status;

---
LOG
---
Log sequence number 150487309917
Log flushed up to   150487301231
Pages flushed up to 150486653746
Last checkpoint at  150486653746

Last checkpoint at之后的数据还缓存在InnoDB Buffer Pool中,但日志已经记录,
InnoDB将日志 Last checkpoint at --> Log sequence number 应用于每张物理表。

1. 备份(--backup

XtraBackup2.4 备份恢复原理_第1张图片
在备份阶段,XtraBackup会创建两个线程

  • thread1,InnoDB事务日志监控线程,用于循环复制文件中的新增日志
  • thread2,MySQL数据库表复制线程,用于备份复制所有物理库表等文件

当thread2将所有物理文件复制完成之后,通知thread1停止监控事务日志。最终除了所有数据库相关的物理文件之外,生成xtrabackup_logfile, xtrabackup_checkpoints, xtrabackup_info三个额外文件,XtraBackup用于备份恢复或搭建从库。

2. 准备(--prepare

在准备阶段,由于备份是将所有物理库表等文件复制到备份目录,而整个过程需要持续一段时间,在此期间,物理文件可能改变,这将导致最终备份结果处于不一致状态(所有文件不是处于同一个时间点)。

$ cat xtrabackup_checkpoints

backup_type = full-backuped
from_lsn = 0
to_lsn = 150477836571
last_lsn = 150478402181
compact = 0
recover_binlog_info = 0

从文件中可以看出,备份开始前InnoDB最后一次checkpoint是在to_lsn = 150477836571位置,备份结束后InnoDB最后一次checkpoint是在last_lsn = 150478402181,因此,就需要xtrabackup_logfile(Redo Log)将监控复制的所有事务日志to_lsn-->last_lsn逐一应用(提交、回滚)到所有物理库表文件,从而达到最终一致性。

3. 恢复(--copy-back

在恢复阶段,所作的事情就很简单了,将所有备份文件复制到datadir(前提是清空文件夹)中即可。

你可能感兴趣的:(mysql)