XtraBackup2.4 备份恢复原理

在这篇文章中,大家将会了解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

在这里插入图片描述
在备份阶段,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(前提是清空文件夹)中即可。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值