物理备份工具Xtrabackup备份和恢复原理详解

发布于:2025-04-03 ⋅ 阅读:(19) ⋅ 点赞:(0)

一、XtraBackup 的特点

  1. 非阻塞备份

    • 热备份:XtraBackup 能够在数据库运行时进行备份,无需停止数据库服务或锁定表。这使得备份过程对数据库的正常运行几乎没有影响,特别适合高负载的生产环境。

    • 无锁表操作:备份过程中不会打断正在进行的事务,确保数据的一致性,同时不影响数据库性能。

  2. 备份和恢复速度快

    • 物理备份:XtraBackup 采用物理备份方式,直接备份数据文件,而不是逻辑备份(如 mysqldump)。这种方式备份和恢复速度更快,特别适合大规模数据库。

    • 增量备份:支持基于时间点的增量备份,只备份自上次备份以来发生更改的数据,节省存储空间和备份时间。

    • 压缩和流式备份:支持备份数据的压缩和流式传输,减少磁盘空间和网络带宽的使用,进一步提高备份效率。

  3. 版本兼容性

    • XtraBackup 8.0:专为 MySQL 8.0 设计,支持 MySQL 8.0 的所有新特性和功能。

    • 向下兼容性限制:XtraBackup 8.0 不支持备份 MySQL 8.0 之前的版本。如果需要备份 MySQL 5.6 或 5.7,应使用 XtraBackup 2.4 版本。

    • 版本匹配:确保 XtraBackup 版本与 MySQL 版本匹配,以避免兼容性问题。

二、下载

下载地址,选择对应MySQL版本的Percona XtraBackup

Software Downloads - Percona

wget https://downloads.percona.com/downloads/Percona-XtraBackup-8.0/Percona-XtraBackup-8.0.25-17/binary/redhat/8/x86_64/percona-xtrabackup-80-8.0.25-17.1.el8.x86_64.rpm

yum install percona-xtrabackup-80-8.0.25-17.1.el8.x86_64.rpm -y

三、XtraBackup的备份原理 

1. 记录 LSN,复制 InnoDB 的数据文件,复制 redo log

  • LSN(Log Sequence Number) 是 InnoDB 的日志系统中用于标识事务日志位置的编号。LSN 是一个递增的值,用于记录数据库的更改。

  • XtraBackup 会记录备份开始时的 LSN,并复制 InnoDB 的数据文件(如 .ibdibdata1 文件)。

  • 同时,它会持续复制 redo log(重做日志),用于在备份过程中捕获所有对数据库的更改。

2. 加备份锁

  • 在备份过程中,XtraBackup 会对事务引擎(如 InnoDB)的数据加一个轻量级的备份锁。这个锁的作用是确保在备份过程中不会丢失事务的更改。

  • 这种锁不会阻塞事务的正常运行,因此 XtraBackup 可以在数据库运行时进行备份。

3. 备份完事务引擎的数据和日志后,锁定非事务表

  • 事务引擎(如 InnoDB)的数据和日志备份完成后,XtraBackup 会锁定非事务引擎的表(如 MyISAM 引擎的表)。

  • 锁定非事务表的目的是为了确保这些表的数据在备份时不会被修改,从而保证备份的一致性。

4. 复制非事务引擎的表数据文件

  • 在非事务表被锁定后,XtraBackup 会直接复制这些表的数据文件(如 .frm.MYD 文件)。

  • 由于非事务表没有事务日志,直接复制数据文件即可。

5. 查询 GTID 信息和 binlog 位点

  • GTID(Global Transaction Identifier) 是 MySQL 5.6 引入的一种全局事务标识符,用于标识每个事务的唯一性。

  • binlog 位点 是 MySQL 的二进制日志(binlog)的偏移量,用于记录事务的执行位置。

  • XtraBackup 会查询当前的 GTID 信息和 binlog 位点,以便在恢复时能够定位到正确的日志位置。

6. 停止复制 redo log

  • 在备份完成后,XtraBackup 会停止复制 redo log,以确保备份的 redo log 是完整的。

7. 释放锁

  • 在备份完成后,XtraBackup 会释放之前加的备份锁和对非事务表的锁定,以允许数据库继续正常运行。

8. 备份完成

  • XtraBackup 会将备份的数据文件、redo log、binlog 位点等信息打包,生成一个完整的备份集。

四、XtraBackup的恢复原理

Prepare 阶段

  1. 模拟崩溃恢复,将 redo log 回放到数据文件中

    • 在 Prepare 阶段,XtraBackup 会启动一个嵌入的 InnoDB 实例,模拟数据库的崩溃恢复过程。

    • 应用 redo log:将备份期间捕获的 redo log 应用到数据文件中,确保所有已提交的事务都被同步到数据文件。

    • 回滚未提交的事务:将未提交的事务回滚,使数据文件处于一致性状态。

  2. 重建 redo log

    • 在 Prepare 阶段完成后,XtraBackup 会重建 redo log,确保在恢复后的数据文件中,redo log 是空的。

    • 这一步是为了确保 MySQL 在启动时不会再次应用备份期间的 redo log,从而避免数据不一致。

恢复阶段

  1. 将数据文件复制或者移动到 MySQL 数据目录

    • 在 Prepare 阶段完成后,备份数据文件已经处于一致性状态,可以将其复制或移动到 MySQL 的数据目录中。

    • 使用 --copy-back 参数可以将备份数据文件复制到 MySQL 数据目录。

    • 确保 MySQL 服务对数据目录有正确的读写权限。

  2. 还原完成

    • 数据文件成功复制到 MySQL 数据目录后,恢复过程基本完成。

  3. 启动 MySQL

    • 启动 MySQL 服务,使用恢复后的数据文件。

    • 在启动过程中,MySQL 会检查数据文件的状态,并确保其一致性。


网站公告

今日签到

点亮在社区的每一天
去签到