Mysql
Percona Xtrabackup 基於準備好的完整備份的增量備份
我想使用 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
要實現您的場景,您需要:
- 進行完整備份
innobackupex --no-timestamp /path/full
- 保存最後一個 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 }'`
- 應用 xtrabackup REDO 日誌
innobackupex --apply-log --redo-only /path/full/
- 進行增量備份
innobackupex --no-timestamp --incremental /path/inc/ --incremental-lsn=$to_lsn
- 保存最後一個 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 }'`
- 應用增量更改和重做日誌
innobackupex --apply-log --redo-only --incremental-dir=/path/inc /path/full/
- 使用增量備份刪除目錄
rm -r /path/inc
根據需要重複 4-7 次。/path/full 將包含您的數據庫的最新版本。
當你想恢復數據庫時
- 完成應用日誌(= 創建重做日誌):
innobackupex --apply-log /path/full
- 將備份副本複製到 datadir
mv /path/full/* /var/lib/mysql
- 修復權限(檢查 /path/full/backup-my.cnf 中的選項是否與 /etc/my.cnf 中的選項相同(Debian 為 /etc/mysql/my.cnf))
chown -R mysql /var/lib/mysql
- 啟動 MySQL
/etc/init.d/mysql start