重要
このページは英語版のページを機械翻訳しています。原文はこちらからご覧ください。

BRを使用してクラスターデータを復元する

このドキュメントでは、次のシナリオでBRを使用してクラスタデータを復元する方法について説明します。

バックアップと復元(BR)に慣れていない場合は、次のドキュメントを読んで、BRの使用原則と方法を完全に理解することをお勧めします。

TiDBクラスタスナップショットを復元する

BRは、スナップショットのバックアップ時にターゲットクラスタを最新の状態に復元するために、空のクラスタでのスナップショットバックアップの復元をサポートしています。

例: 2022-01-30 07:42:23で生成されたスナップショットをAmazonS3のbackup-dataバケットの2022-01-30/ディレクトリからターゲットクラスタに復元します。

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ロギングのターゲットファイル

復元中は、以下に示すように、端末にプログレスバーが表示されます。プログレスバーが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コマンドを実行します。

例:AmazonS3の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で指定されたデータベース名は、backupコマンドで-- dbで指定されたデータベース名と同じである必要があります。それ以外の場合、復元は失敗します。これは、バックアップデータのメタファイル( backupmetaファイル)にデータベース名が記録されており、同じ名前のデータベースにしかデータを復元できないためです。推奨される方法は、バックアップデータを別のクラスタの同じ名前のデータベースに復元することです。

テーブルを復元する

単一のテーブルをクラスタに復元するには、 br restore tableコマンドを実行します。このコマンドのヘルプを表示するには、 br restore table --helpコマンドを実行します。

例:復元testtable-db-usertable/2022-01-30/backup-dataバケットのusertableディレクトリからターゲットクラスタに移動します。

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テーブルフィルターを指定します。

例:AmazonS3の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を使用した完全なデータの復元に似ています。インクリメンタルデータを復元するときは、 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.*'は、特に明記されていない限り、BRにmysqlのテーブルを復元しないように指示します。
  • -f 'mysql.usertable'は、 mysql.usertableを復元する必要があることを示します。

mysql.usertableのみを復元する必要がある場合は、次のコマンドを実行します。

br restore full -f 'mysql.usertable' -s $external_storage_url --ratelimit 128
警告

BRを使用してシステムテーブル( mysql.tidbなど)をバックアップできますが、-filter設定を使用して復元を実行した場合でも、BRは次のシステムテーブルを無視します。

  • 統計情報表( mysql.stat_*
  • システム変数mysql.global_variables mysql.tidb
  • ユーザー情報テーブル( mysql.usermysql.columns_privなど)
  • その他のシステムテーブル

システムテーブルを復元するときに、互換性の問題が発生する可能性があります。したがって、実稼働環境でシステムテーブルを復元することは避けてください。

復元のパフォーマンスと影響

  • TiDBは、データを復元するときにTiKV CPU、ディスクIO、ネットワーク帯域幅、およびその他のリソースを完全に使用します。したがって、実行中のサービスに影響を与えないように、空のクラスタにバックアップデータを復元することをお勧めします。
  • 復元速度は、cluserの構成、展開、および実行中のサービスに大きく依存します。通常、復元速度は100 MB / s(TiKVノードあたり)に達する可能性があります。

ノート:

多くのシナリオでのシミュレーションテストに基づいており、一部の顧客サイトで検証された前述のテストの結論は、参照する価値があります。ただし、シナリオによって復元速度が異なる場合があります。したがって、常にテストを実行し、テスト結果を確認する必要があります。