web-dev-qa-db-ja.com

準備された完全バックアップに基づくPerconaXtrabackup増分バックアップ

Percona XtraBackupを使用して、MySQLデータベースのステージングシステムへの1時間ごとのバックアップを作成したいと思います。

$ BACKUPBASEを準備してから、この準備されたバックアップベースを次の増分バックアップのベースとして使用することは可能ですか(incremental-lsnオプションを使用)。

私の計画は次のとおりです。

  • $ BACKUPBASEに一度完全バックアップを取ります
  • その後、1時間ごと:

    • $ BACKUPBASEの上に増分バックアップを取ります
    • を使用して増分バックアップを$ BACKUPBASEに統合します

      innobackupex --apply-log $BACKUPBASE --incremental-dir=$INCREMENTALDIR
      innobackupex --apply-log $BACKUPBASE
      
    • $ INCREMENTALDIRを削除します

具体的には:

  • --redo-logオプションはどうですか。このシナリオでこのオプションを指定する必要があるのはいつですか?
  • 準備された$ BACKUPBASEに増分バックアップを適用できますか
3
PaulSmecker

いいえ。上記の--apply-logはxtrabackup_checkpointsのLSNを更新しないため、次の増分バックアップごとに、最後の完全バックアップ以降に変更されたページがコピーされます。それはあなたが達成したいことではありません

[〜#〜] upd [〜#〜]

シナリオを実装するには、次のものが必要です。

  1. 完全バックアップを取る

    innobackupex --no-timestamp /path/full
    
  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 }'`
    
  3. エクストラバックアップREDOログを適用する

    innobackupex --apply-log --redo-only /path/full/
    
  4. 増分バックアップを取る

    innobackupex --no-timestamp --incremental /path/inc/ --incremental-lsn=$to_lsn
    
  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 }'`
    
  6. 増分変更とREDOログを適用する

    innobackupex --apply-log --redo-only --incremental-dir=/path/inc /path/full/
    
  7. 増分バックアップでディレクトリを削除する

    rm -r  /path/inc
    

必要な数だけ4〜7を繰り返します。/path/fullには、データベースの最新バージョンが含まれます。

データベースを復元したいとき

  1. ログの適用を終了します(= REDOログを作成します):

    innobackupex --apply-log /path/full
    
  2. バックアップコピーをdatadirにコピーします

    mv /path/full/* /var/lib/mysql
    
  3. 権限を修正します(/path/full/backup-my.cnfのオプションが/etc/my.cnf(Debianの場合は/etc/mysql/my.cnf)のオプションと同じであることを確認します)

    chown -R mysql /var/lib/mysql
    
  4. MySQLを起動します

    /etc/init.d/mysql start
    
5
akuzminsky