Mysql

Percona Xtrabackup 基於準備好的完整備份的增量備份

  • February 18, 2016

我想使用 Percona XtraBackup 將我們的 MySQL 數據庫每小時備份到一個登台系統。

是否可以準備 $BACKUPBASE,然後將此準備好的備份庫用作以下增量備份的基礎(使用增量-lsn 選項)?

我的計劃是:

  • 對 $BACKUPBASE 進行一次完整備份

  • 然後每小時:

    • 在 $BACKUPBASE 之上進行增量備份
    • 使用將增量備份集成到 $BACKUPBASE
    innobackupex --apply-log $BACKUPBASE --incremental-dir=$INCREMENTALDIR
    innobackupex --apply-log $BACKUPBASE
    
    • 刪除 $INCREMENTALDIR

更具體:

  • –redo-log 選項呢?在這種情況下,我何時必須指定此選項?
  • 您可以將增量備份應用於準備好的 $BACKUPBASE

不,因為上面提到的 –apply-log 不會更新 xtrabackup_checkpoints 中的 LSN,因此每次下一次增量備份都會複製自上次完整備份以來修改的頁面。這不是你想要達到的

UPD

要實現您的場景,您需要:

  1. 進行完整備份
innobackupex --no-timestamp /path/full
  1. 保存最後一個 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 }'`
  1. 應用 xtrabackup REDO 日誌
innobackupex --apply-log --redo-only /path/full/
  1. 進行增量備份
innobackupex --no-timestamp --incremental /path/inc/ --incremental-lsn=$to_lsn
  1. 保存最後一個 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 }'`
  1. 應用增量更改和重做日誌
innobackupex --apply-log --redo-only --incremental-dir=/path/inc /path/full/
  1. 使用增量備份刪除目錄
rm -r  /path/inc

根據需要重複 4-7 次。/path/full 將包含您的數據庫的最新版本。

當你想恢復數據庫時

  1. 完成應用日誌(= 創建重做日誌):
innobackupex --apply-log /path/full
  1. 將備份副本複製到 datadir
mv /path/full/* /var/lib/mysql
  1. 修復權限(檢查 /path/full/backup-my.cnf 中的選項是否與 /etc/my.cnf 中的選項相同(Debian 為 /etc/mysql/my.cnf))
chown -R mysql /var/lib/mysql
  1. 啟動 MySQL
/etc/init.d/mysql start

引用自:https://serverfault.com/questions/578448