xtrabackupフルスタンバイとリカバリの組み合わせ

8927 ワード

インクリメンタルバックアップとリストア


インクリメンタルバックアップは、スペースの使用とバックアップの時間を減らすためです.インクリメンタル・バックアップの実装は、innodbページのLSN(log sequence number)に依存し、データベースの変更のたびにLSNが自己増加します.インクリメンタル・バックアップでは、指定したLSN以降のすべてのデータ・ページがコピーされます.

インクリメンタルバックアップの作成


フル・スペアの作成


インクリメンタル・バックアップを作成する前に完全なバックアップが必要です.そうしないと、インクリメンタル・バックアップは意味がありません.no-timestampオプションでは、バックアップ・ディレクトリの下に時間名のサブフォルダは作成されません.
$ innobackupex  -H 127.0.0.1 -u root -p newpass -P 3306 -S /var/lib/mysql/mysql.sock /home/xtarback/fulldata
 
$ innobackupex --host=127.0.0.1 --user=root --password=newpass --port=3306 \
--socket=/var/lib/mysql/mysql.sock /home/xtarback/fulldata

これにより、/home/xtarback/fulldata/の下にタイムスタンプフォルダが作成されます.たとえば、/home/xtarback/fulldata/2017-02-24_09-39-18、フォルダ内はバックアップファイルです.
バックアップフォルダの下にあるxtrabackup-checkpointsを確認すると、次の情報が表示されます.
[root@localhost 2017-02-24_09-39-18]# cat xtrabackup_checkpoints 
backup_type = full-backuped
from_lsn = 0
to_lsn = 3693629
last_lsn = 3693629
compact = 0
recover_binlog_info = 0
[root@localhost 2017-02-24_09-39-18]#

最初のインクリメンタルバックアップの作成

  • incremental 01を1枚追加した表sqlは以下の通り
  • CREATE TABLE incremental01 (
        name VARCHAR(50) NULL DEFAULT NULL,
        tpye VARCHAR(50) NULL DEFAULT NULL,
        commond VARCHAR(600) NULL DEFAULT NULL
    )
    ENGINE=InnoDB
    ; 
    
     
    REPLACE INTO incremental01 (name, tpye, commond) VALUES ('incremental01', 'incremental', 'innobackupex --incremental -u root -p newpass /home/xtarback/incremental/ --incremental-basedir=/home/xtarback/fulldata/2017-02-24_09-39-18');
    

    次に、--incrementalを使用してインクリメンタルバックアップを作成します--incremental-basedir=name--incremental-dir=name
    $ innobackupex --incremental/home/xtarback/incremental/--incremental-basedir=BASEDIR
    [root@localhost 2017-02-24_09-39-18]# innobackupex --incremental -u root -p newpass \
     /home/xtarback/incremental/ --incremental-basedir=/home/xtarback/fulldata/2017-02-24_09-39-18
    

    BASEDIRは、/home/xtarback/fulldata/2017-02-24_を指します.09-39-18、バックアップが成功すると、/home/xtarback/incremental/のタイムスタンプディレクトリが生成されます.たとえば、/home/xtarback/incremental/2017-02-24_10-01-47、このディレクトリをINCREMENTAL-DIR-1側と表記して使用します.
    次にxtrabackup-checkpointsを表示します.
    [root@localhost 2017-02-24_10-01-47]# cat xtrabackup_checkpoints 
    backup_type = incremental
    from_lsn = 3693629
    to_lsn = 3734903
    last_lsn = 3734903
    compact = 0
    recover_binlog_info = 0
    _# lsn , 0-3693629, , lsn 3693629-3734903_
    [root@localhost 2017-02-24_10-01-47]# cat /home/xtarback/fulldata/2017-02-24_09-39-18/xtrabackup_checkpoints 
    backup_type = full-backuped
    from_lsn = 0
    to_lsn = 3693629
    last_lsn = 3693629
    compact = 0
    recover_binlog_info = 0
    [root@localhost 2017-02-24_10-01-47]#
    

    全てとは違ってbackup_typeはincremental,from_lsnは0ではありません.

    1つ目のインクリメンタル・バックアップに基づいて2つ目のインクリメンタル・バックアップを作成


    INCREMENTAL-DIR-1に加えて、INCREMENTAL-DIR-2としてインクリメンタルバックアップを作成します.
  • incremental 02テーブルを追加してデータを入力し
  • CREATE TABLE `incremental02` (
        `name` VARCHAR(50) NULL DEFAULT NULL,
        `tpye` VARCHAR(50) NULL DEFAULT NULL,
        `commond` VARCHAR(600) NULL DEFAULT NULL
    )
    ENGINE=InnoDB
    ; 
    

    以下のデータREPLACE INTOincremental02(nametpye、、、commond)VALUES('incremental 02','incremental','innobackupex--incremental-u root-p newpass/home/xtarback/incremental/--incremental-basedir=/home/xtarback/incremental/incremental/2014_14_17-01-47')を追加します.
  • 2回目のインクリメンタルバックアップ$innobackupex--incremental/data/backups--incremental-basedir=INCREMENTAL-DIR-1
  • [root@localhost 2017-02-24_10-11-28]# innobackupex --incremental -u root -p newpass \
     /home/xtarback/incremental/ --incremental-basedir=/home/xtarback/incremental/2017-02-24_10-01-47
    

    バックアップ完了/home/xtarback/incrementalディレクトリの下に、/home/xtarback/incremental/2017-02-24_などのタイムスタンプ付きサブディレクトリを追加10-11-28 xtrabackup-checkpointsを表示します.
    # 
    [root@localhost 2017-02-24_10-11-28]# cat xtrabackup_checkpoints 
    backup_type = incremental
    from_lsn = 3734903
    to_lsn = 3739279
    last_lsn = 3739279
    compact = 0
    recover_binlog_info = 0
    [root@localhost 2017-02-24_10-11-28]#
    
    # 
    [root@localhost 2017-02-24_10-01-47]# cat xtrabackup_checkpoints 
    backup_type = incremental
    from_lsn = 3693629
    to_lsn = 3734903
    last_lsn = 3734903
    compact = 0
    recover_binlog_info = 0
    
    # 
    [root@localhost 2017-02-24_10-01-47]# cat /home/xtarback/fulldata/2017-02-24_09-39-18/xtrabackup_checkpoints 
    backup_type = full-backuped
    from_lsn = 0
    to_lsn = 3693629
    last_lsn = 3693629
    compact = 0
    recover_binlog_info = 0
    [root@localhost 2017-02-24_10-01-47]#
    

    インクリメンタルバックアップの代替方法
    指定-incremental-basedirの代わりにincremental-lsnを使用してインクリメンタルバックアップを作成できます.
    innobackupex--incremental/data/backups--incremental-lsn=3734903#最初のインクリメンタルバックアップ時に完全なlast_に基づくlsn
    innobackupex--incremental/data/backups--incremental-lsn=3693629#2回目のインクリメンタルバックアップ時に1回目のインクリメンタルに基づくlast_lsn
    注意:xtrabackupはxtradbまたはinnodbのテーブルにのみ影響し、他のエンジンのテーブルはインクリメンタルバックアップ時にファイル全体をコピーするだけで、違いはありません.

    要約情報


    バックアップ・タイプ
    バックアップディレクトリ
    lsn範囲
    full-backuped
    /home/xtarback/fulldata/2017-02-24_09-39-18
    0-3693629
    incremental01
    /home/xtarback/incremental/2017-02-24_10-01-47
    3693629-3734903
    incremental02
    /home/xtarback/incremental/2017-02-24_10-11-28
    3734903-3739279

    インクリメンタルバックアップの準備


    インクリメンタルバックアップの準備には2つのステップが必要です.
    1.事前準備が必要ですが、コミットされたトランザクションのみをやり直し、コミットされていないトランザクションをロールバックせず、その後、完全準備に適用します.コミットされたトランザクションのみをやり直し、コミットされていないトランザクションをロールバックしません.
    2.未コミットトランザクションのロールバック
    コミットされていないトランザクションがロールバックされている場合は、インクリメンタルバックアップを適用できません.
    注意:mariadb 10.0でテストしたところ、redo-onlyは完全に準備されていることがわかりました.その後、-redo-onlyを使用してインクリメンタルバックアップを適用すると、mysqlサービスが正常に起動し、データが正常に復元されます.
    「完全準備」で、「redo-only」を使用すると、コミットされたトランザクションのみがロールバックされ、コミットされていないトランザクションはロールバックされません.
    innobackupex --apply-log --redo-only/home/xtarback/fulldata/2017-02-24_09-39-18
    次の結果が表示されます.
    InnoDB: Doing recovery: scanned up to log sequence number 3693629 (0%)
    xtrabackup: starting shutdown with innodb_fast_shutdown = 1 InnoDB: Starting shutdown... InnoDB: Shutdown completed; log sequence number 3693638 InnoDB: Number of pools: 1 170224 10:31:57 completed OK!
    最初のインクリメンタルバックアップの適用
    innobackupex --apply-log --redo-only/home/xtarback/fulldata/2017-02-24_09-39-18 --incremental-dir=/home/xtarback/incremental/2017-02-24_10-01-47出力結果、LSNの変化に注意:以下のxtrabackup_checkpointsレコードが変更された[root@localhost 2017-02-24_10-11-28]# cat/home/xtarback/fulldata/2017-02-24_09-39-18/xtrabackup_checkpoints backup_type = log-applied from_lsn = 0 to_lsn = 3734903 last_lsn = 3734903 compact = 0 recover_binlog_info=0統合前のレコード、完全なlast_lsnは3693629から初めて増設されたlast_に変わったlsn 3734903--incremental-dirが指定されていない場合、innobackupexはbasedirで作成された最近のサブディレクトリを使用します.
    別のバックアップを適用
    innobackupex --apply-log /home/xtarback/fulldata/2017-02-24_09-39-18 --incremental-dir=/home/xtarback/incremental/2017-02-24_10-11-28
    
    InnoDB: Shutdown completed; log sequence number 3739823
    170224 10:42:28 completed OK!
    [root@localhost 2017-02-24_09-39-18]# cat xtrabackup_checkpoints 
    backup_type = full-prepared
    from_lsn = 0
    to_lsn = 3739279
    last_lsn = 3739279
    compact = 0
    recover_binlog_info = 0
    [root@localhost 2017-02-24_09-39-18]#
    

    最後のインクリメンタル・バックアップなので、redo-onlyを追加する必要はありません.これにより、最後のインクリメンタルもフル・スペアに適用されます.
    注意:--redo-onlyは、最後の追加なしを除いて、他のインクリメンタルアプリケーションを追加します.最後のアプリケーションでは、コミットされていないトランザクションのロールバック・フェーズに直接アクセスできます.追加しても大丈夫なら、サービス開始時にrecoveryプロセスに入り、ロールバックします
    インクリメンタルバックアップを適用する場合は、バックアップの順序でのみ適用できます.適用順序が間違っている場合は、バックアップは使用できません.順序を決定できない場合はxtrabackup-checkpointsを使用して順序を決定できます.
    コミットされていないトランザクションのロールバック
    すべてのインクリメンタル・バックアップが適用されると、すべての未完了トランザクションをロールバックする必要があります(最後のステップが追加された場合-redo-onlyは未コミットをロールバックする必要があり、実行しないと、サービス起動フェーズでサービスは未コミットトランザクションを処理します).
    innobackupex --apply-log/home/xtarback/fulldata/2017-02-24_09-39-18
    Note that the iblog* files will not be created by innobackupex, if you want them to be created, use xtrabackup –prepareon the directory. Otherwise, the files will be created by the server once started.
    注意:
    本文ではinnodbトランザクションログ(iblog)は作成されませんが、テストの下で最後のロールバックを使用してトランザクションをコミットしていないとiblogファイルが発見され、innobackupexは2回xtrabackup–prepareを暗黙的に実行し、xtrabackupを以下で説明すると、2回xtrabackup–preareを実行するとiblog*ファイルが作成され、本文で説明したものと一致しません.

    インクリメンタルバックアップのリストア

  • 1回目のインクリメンタル・バックアップと2回目のインクリメンタル・バックアップを削除したテーブルのリストア操作
  • mysql> drop table incremental01;
    Query OK, 0 rows affected (0.01 sec)
    
    mysql> drop table incremental02;
    Query OK, 0 rows affected (0.01 sec)
    

    インクリメンタル・バックアップのリストアは、リストアと同じです.
    innobackupex --copy-back/home/xtarback/fulldata/2017-02-24_09-39-18
    注:innobackupexを使用してバックアップをリストアする