MySQL XtraBackup 备份原理

实现原理:

XtraBackup基于InnoDB的crash recovery机制,在备份还原时利用redo log得到完整的数据文件,并通过全局读锁,保证InnoDB数据与非InnoDB数据的一致性,最终完成备份还原的功能

由于是热备操作,在备份过程中可能有持续的数据写入,直接复制出来的数据文件可能有缺失或被修改的页,而redo log记录了InnoDB引擎的所有事务日志,可以在还原时应用redo log来补全数据文件中缺失或修改的页。所以为了确保redo log一定包含备份过程中涉及的数据页,需要首先开始复制redo log

全备流程

1. 复制已有的redo log,然后监听redo log变化并持续复制

2. 复制事务引擎数据文件 

3. 等到数据文件复制完成

4. 加锁:全局读锁

5. 备份非事务引擎数据文件及其他文件

6. 获取binlog点位信息等元数据

7. 停止复制redo log
    为什么要先停止复制redo log,再解锁全局读锁?
    也是因为要保证“非事务资源与事务资源的一致性”,保证通过redo log回放后的InnoDB数据与非InnoDB数据都是处于读锁期间取得的位点。

8. 解锁:全局读锁

9. 复制buffer pool dump

10. 备份完成

 

全备还原流程
 

1. 模拟MySQL进行recover,将redo log回放到数据文件中

2. 等到recover完成

3. 重建redo log,为启动数据库做准备

4. 将数据文件复制回MySQL数据目录

5. 还原完成

在recover完成后,InnoDB数据与非InnoDB数据是达成一致的吗
    InnoDB数据会被恢复至备份结束时(全局读锁时)的状态,而非InnoDB数据本身即是在全局读锁时被复制出来,它们的数据一致。
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值