BR を使用してクラスタデータを復元する
このドキュメントでは、次のシナリオで TiDB クラスター データを復元する方法について説明します。
- TiDB クラスターのスナップショットを復元する
- データベースを復元する
- テーブルを復元する
- テーブル フィルターを使用して複数のテーブルを復元する
- 外部ストレージからバックアップ データを復元する
- 増分データの復元
- 暗号化されたバックアップ データを復元する
mysql
スキーマで作成されたテーブルを復元する
バックアップ ツールと復元ツールに慣れていない場合は、次のドキュメントを読んで、これらのツールの使用原理と方法を完全に理解することをお勧めします。
Dumpling、CSV ファイル、または Amazon Auroraによって生成された Apache Parquet ファイルによってエクスポートされたデータを復元する必要がある場合は、 TiDB Lightningを使用してデータをインポートし、復元を実装できます。詳細については、 TiDB Lightningを使用して完全なデータを復元するを参照してください。
TiDB クラスターのスナップショットを復元する
BR は、空のクラスターでのスナップショット バックアップの復元をサポートし、スナップショットのバックアップ時にターゲット クラスターを最新の状態に復元します。
例: Amazon S3 のbackup-data
バケットの2022-01-30/
ディレクトリから2022-01-30 07:42:23
で生成されたスナップショットをターゲット クラスタに復元します。
br restore full \
--pd "${PDIP}:2379" \
--storage "s3://backup-data/2022-01-30/" \
--ratelimit 128 \
--log-file restorefull.log
前のコマンドでは、
--ratelimit
:各 TiKVが復元タスクを実行する最大速度 (単位: MiB/s)--log-file
BR ロギングの対象ファイル
復元中は、以下に示すように、進行状況バーがターミナルに表示されます。プログレス バーが 100% まで進むと、復元は完了です。データのセキュリティを確保するために、BR は復元されたデータに対してチェックを実行します。
br restore full \
--pd "${PDIP}:2379" \
--storage "s3://backup-data/2022-01-30/" \
--ratelimit 128 \
--log-file restorefull.log
Full Restore <---------/...............................................> 17.12%.
データベースまたはテーブルを復元する
BR は、指定されたデータベースまたはテーブルの部分データをバックアップ データから復元することをサポートします。この機能を使用すると、不要なデータを除外して、特定のデータベースまたはテーブルのみをバックアップできます。
データベースを復元する
データベースをクラスターに復元するには、 br restore db
コマンドを実行します。このコマンドのヘルプを表示するには、 br restore db --help
コマンドを実行します。
例: Amazon S3 のbackup-data
バケットのdb-test/2022-01-30/
ディレクトリからtest
データベースをターゲット クラスタに復元します。
br restore db \
--pd "${PDIP}:2379" \
--db "test" \
--ratelimit 128 \
--storage "s3://backup-data/db-test/2022-01-30/" \
--log-file restore_db.log
上記のコマンドで、 --db
は復元するデータベースの名前を指定し、その他のパラメーターはTiDB クラスターのスナップショットを復元すると同じです。
ノート:
バックアップデータを復元する場合、
--db
で指定したデータベース名は、バックアップコマンドの-- db
で指定したデータベース名と同じでなければなりません。そうしないと、復元は失敗します。これは、バックアップ データのメタファイル (backupmeta
ファイル) にデータベース名が記録されており、同じ名前のデータベースにしかデータを復元できないためです。推奨される方法は、バックアップ データを別のクラスター内の同じ名前のデータベースに復元することです。
テーブルを復元する
1 つのテーブルをクラスターに復元するには、 br restore table
コマンドを実行します。このコマンドのヘルプを表示するには、 br restore table --help
コマンドを実行します。
例: test
を復元します。 usertable
Amazon S3 のbackup-data
バケット内のtable-db-usertable/2022-01-30/
ディレクトリからターゲット クラスタへ。
br restore table \
--pd "${PDIP}:2379" \
--db "test" \
--table "usertable" \
--ratelimit 128 \
--storage "s3://backup-data/table-db-usertable/2022-01-30/" \
--log-file restore_table.log
上記のコマンドで、 --table
は復元するテーブルの名前を指定し、その他のパラメーターはTiDB クラスターのスナップショットを復元すると同じです。
テーブル フィルターを使用して複数のテーブルを復元する
複数の基準で複数のテーブルを復元するには、 br restore full
コマンドを実行し、 --filter
または-f
でテーブル フィルターを指定します。
例: Amazon S3 のbackup-data
バケットのtable-filter/2022-01-30/
ディレクトリからdb*.tbl*
テーブルに一致するデータをターゲット クラスタに復元します。
br restore full \
--pd "${PDIP}:2379" \
--filter 'db*.tbl*' \
--storage "s3://backup-data/table-filter/2022-01-30/" \
--log-file restorefull.log
外部ストレージからバックアップ データを復元する
BR は、Amazon S3、Google Cloud Storage (GCS)、Azure Blob Storage、NFS、またはその他の S3 互換ファイル ストレージ サービスへのデータの復元をサポートしています。詳細については、次のドキュメントを参照してください。
- BR を使用して Amazon S3 にデータを復元する
- BR を使用して Google Cloud Storage にデータを復元する
- BR を使用して Azure Blob Storage にデータを復元する
増分データの復元
増分データの復元は、BR を使用した完全なデータの復元に似ています。増分データを復元する場合は、 last backup ts
より前にバックアップされたすべてのデータがターゲット クラスターに復元されていることを確認してください。また、増分復元では ts データが更新されるため、復元中に他の書き込みが行われないようにする必要があります。そうしないと、競合が発生する可能性があります。
br restore full \
--pd "${PDIP}:2379" \
--storage "s3://backup-data/2022-01-30/incr" \
--ratelimit 128 \
--log-file restorefull.log
暗号化されたバックアップ データを復元する
バックアップ データを暗号化したら、対応する復号化パラメータを渡してデータを復元する必要があります。復号化アルゴリズムとキーが正しいことを確認してください。復号化アルゴリズムまたはキーが正しくない場合、データは復元できません。
br restore full\
--pd ${PDIP}:2379 \
--storage "s3://backup-data/2022-01-30/" \
--crypter.method aes128-ctr \
--crypter.key 0123456789abcdef0123456789abcdef
mysql
スキーマで作成されたテーブルを復元する
BR は、デフォルトでmysql
スキーマで作成されたテーブルをバックアップします。 BR を使用してデータを復元する場合、 mysql
スキーマで作成されたテーブルはデフォルトでは復元されません。これらのテーブルを復元するには、 テーブル フィルターを使用して明示的に含めることができます。次の例では、 mysql
スキーマで作成されたmysql.usertable
を復元します。このコマンドは、他のデータとともにmysql.usertable
を復元します。
br restore full -f '*.*' -f '!mysql.*' -f 'mysql.usertable' -s $external_storage_url --ratelimit 128
前のコマンドでは、
-f '*.*'
は、デフォルトのルールをオーバーライドするために使用されます-f '!mysql.*'
は、特に明記されていない限り、mysql
でテーブルを復元しないように BR に指示します。-f 'mysql.usertable'
は、mysql.usertable
を復元する必要があることを示します。
mysql.usertable
のみを復元する必要がある場合は、次のコマンドを実行します。
br restore full -f 'mysql.usertable' -s $external_storage_url --ratelimit 128
復元性能と影響
- TiDB は、データの復元時に TiKV CPU、ディスク IO、ネットワーク帯域幅、およびその他のリソースを完全に使用します。したがって、実行中のサービスに影響を与えないように、空のクラスターにバックアップ データを復元することをお勧めします。
- 復元速度は、クラスター構成、展開、および実行中のサービスに大きく依存します。通常、復元速度は 100 MB/秒 (TiKV ノードあたり) に達することがあります。
ノート:
多くのシナリオでのシミュレーション テストに基づき、一部の顧客サイトで検証された前述のテストの結論は、参照に値します。ただし、復元速度はシナリオによって異なる場合があります。したがって、常にテストを実行し、テスト結果を確認する必要があります。