Percona Xtrabackup 基于准备好的完整备份的增量备份

Pau*_*ker 4 mysql backup percona

我想使用 Percona XtraBackup 为我们的 MySQL 数据库创建一个每小时备份到一个临时系统。

是否可以准备 $BACKUPBASE,然后将此准备好的备份库用作以下增量备份的基础(使用增量 lsn 选项)?

我的计划是:

  • 对 $BACKUPBASE 进行一次完整备份
  • 然后每小时:

    • 在 $BACKUPBASE 之上进行增量备份
    • 使用以下命令将增量备份集成到 $BACKUPBASE 中

      innobackupex --apply-log $BACKUPBASE --incremental-dir=$INCREMENTALDIR
      innobackupex --apply-log $BACKUPBASE
      
      Run Code Online (Sandbox Code Playgroud)
    • 删除 $INCREMENTALDIR

更具体:

  • --redo-log 选项怎么样。在这种情况下,我什么时候必须指定此选项?
  • 你能将增量备份应用到准备好的 $BACKUPBASE 吗

aku*_*sky 6

否,因为上面提到的 --apply-log 不会更新 xtrabackup_checkpoints 中的 LSN,因此每次增量备份都会复制自上次完整备份以来修改的页面。这不是你想要达到的

UPD

要实现您的场景,您需要:

  1. 进行完整备份

    innobackupex --no-timestamp /path/full
    
    Run Code Online (Sandbox Code Playgroud)
  2. 保存最后一个 LSN

    # cat /path/full/xtrabackup_checkpoints 
    backup_type = full-backuped
    from_lsn = 0
    to_lsn = 1887987291
    last_lsn = 1887987291
    compact = 0
    
    to_lsn=`grep to_lsn /path/full/xtrabackup_checkpoints | awk '{ print $3 }'`
    
    Run Code Online (Sandbox Code Playgroud)
  3. 应用 xtrabackup REDO 日志

    innobackupex --apply-log --redo-only /path/full/
    
    Run Code Online (Sandbox Code Playgroud)
  4. 进行增量备份

    innobackupex --no-timestamp --incremental /path/inc/ --incremental-lsn=$to_lsn
    
    Run Code Online (Sandbox Code Playgroud)
  5. 保存最后一个 LSN

    # cat /path/inc/xtrabackup_checkpoints 
    backup_type = incremental
    from_lsn = 1887987291
    to_lsn = 1887987291
    last_lsn = 1887987291
    compact = 0
    
    to_lsn=`grep to_lsn /path/inc/xtrabackup_checkpoints | awk '{ print $3 }'`
    
    Run Code Online (Sandbox Code Playgroud)
  6. 应用增量更改和重做日志

    innobackupex --apply-log --redo-only --incremental-dir=/path/inc /path/full/
    
    Run Code Online (Sandbox Code Playgroud)
  7. 使用增量备份删除目录

    rm -r  /path/inc
    
    Run Code Online (Sandbox Code Playgroud)

根据需要重复 4-7 次。/path/full 将包含数据库的最新版本。

当您要恢复数据库时

  1. 完成应用日志(=创建重做日志):

    innobackupex --apply-log /path/full
    
    Run Code Online (Sandbox Code Playgroud)
  2. 将备份副本复制到 datadir

    mv /path/full/* /var/lib/mysql
    
    Run Code Online (Sandbox Code Playgroud)
  3. 修复权限(检查 /path/full/backup-my.cnf 中的选项是否与 /etc/my.cnf 中的相同(Debian 为 /etc/mysql/my.cnf))

    chown -R mysql /var/lib/mysql
    
    Run Code Online (Sandbox Code Playgroud)
  4. 启动 MySQL

    /etc/init.d/mysql start
    
    Run Code Online (Sandbox Code Playgroud)