作者信息:https://home.cnblogs.com/u/huangjiabobk

在运维的工作中,xtrabackup的备份,增量备份及恢复的工作原理?

1. XtraBackup 的备份工作原理

XtraBackup 是一种高效的 MySQL 物理备份工具,支持热备份,能够在数据库运行时进行备份,而无需停止数据库服务或锁定表。其备份过程主要包括以下步骤:

  1. 记录 LSN:XtraBackup 在备份开始时记录当前的 LSN(Log Sequence Number,日志序列号),这是一个递增的值,用于标识事务日志的位置。
  2. 复制数据文件:XtraBackup 复制 InnoDB 的数据文件(如 .ibdibdata1 文件)。
  3. 复制 redo log:备份过程中,XtraBackup 持续复制 redo log(重做日志),用于捕获备份期间对数据库的所有更改。
  4. 加备份锁:XtraBackup 会对事务引擎(如 InnoDB)的数据加一个轻量级的备份锁,确保在备份过程中不会丢失事务的更改。
  5. 锁定非事务表:在事务引擎的数据和日志备份完成后,XtraBackup 会锁定非事务引擎的表(如 MyISAM 引擎的表),以确保这些表的数据在备份时不会被修改。
  6. 复制非事务表数据文件:在非事务表被锁定后,直接复制这些表的数据文件(如 .frm.MYD 文件)。
  7. 查询 GTID 信息和 binlog 位点:XtraBackup 查询当前的 GTID(Global Transaction Identifier,全局事务标识符)信息和 binlog 位点,以便在恢复时能够定位到正确的日志位置。
  8. 停止复制 redo log:备份完成后,停止复制 redo log。
  9. 释放锁:释放之前加的备份锁和对非事务表的锁定。
  10. 备份完成:将备份的数据文件、redo log、binlog 位点等信息打包,生成一个完整的备份集。
2. XtraBackup 的增量备份工作原理

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

  1. 记录检查点:在进行增量备份时,XtraBackup 会记录上次完全备份时的检查点位置。
  2. 备份数据页:在后续的备份中,只备份那些在这个检查点之后发生变化的数据页。
  3. 记录日志信息:同时记录备份期间的事务日志信息,以确保数据的一致性。

例如,假设上次全备的 LSN 是 1000,当前增量备份开始时的 LSN 是 2000,那么 XtraBackup 会备份从 LSN 1000 到 2000 之间发生变化的数据页。

3. XtraBackup 的恢复工作原理

XtraBackup 的恢复过程分为两个阶段:Prepare 阶段和恢复阶段。

  1. Prepare 阶段

    • 模拟崩溃恢复:XtraBackup 启动一个嵌入的 InnoDB 实例,模拟数据库的崩溃恢复过程。
    • 应用 redo log:将备份期间捕获的 redo log 应用到数据文件中,确保所有已提交的事务都被同步到数据文件。
    • 回滚未提交的事务:将未提交的事务回滚,使数据文件处于一致性状态。
    • 重建 redo log:在 Prepare 阶段完成后,XtraBackup 会重建 redo log,确保在恢复后的数据文件中,redo log 是空的。
  2. 恢复阶段

    • 复制数据文件:将 Prepare 阶段处理后的数据文件复制或移动到 MySQL 的数据目录。
    • 启动 MySQL:启动 MySQL 服务,使用恢复后的数据文件。
4. 示例
4.1 全量备份
innobackupex --defaults-file=/etc/mysql/my.cnf --user=root --password=your_password --socket=/var/run/mysqld/mysqld.sock --no-timestamp --lock-ddl-per-table --no-version-check --parallel=4 --slave-info /path/to/backup
4.2 增量备份
innobackupex --defaults-file=/etc/mysql/my.cnf --user=root --password=your_password --use-memory=1G --no-timestamp --incremental /path/to/incremental_backup --incremental-basedir=/path/to/full_backup
4.3 恢复
  • 全量备份恢复

    innobackupex --defaults-file=/etc/mysql/my.cnf --use-memory=8G --apply-log /path/to/full_backup
    innobackupex --defaults-file=/etc/mysql/my.cnf --use-memory=8G --copy-back /path/to/full_backup
    
  • 增量备份恢复

    innobackupex --defaults-file=/etc/mysql/my.cnf --use-memory=8G --apply-log --redo-only /path/to/full_backup
    innobackupex --defaults-file=/etc/mysql/my.cnf --use-memory=8G --apply-log --redo-only --incremental-dir=/path/to/incremental_backup /path/to/full_backup
    

    (如果有多个增量备份,仅最后一个增量备份无需指定 --redo-only

综上所述,通过以上步骤,XtraBackup 能够高效地完成备份和恢复操作,确保数据的一致性和完整性。

posted @ 2025-04-02 23:57  黄嘉波  阅读(306)  评论(0)    收藏  举报
版权声明:原创作品,谢绝转载!否则将追究法律责任。--作者 黄嘉波