バックアップと復元にBRコマンドラインを使用する
このドキュメントでは、 BRコマンド ラインを使用して TiDB クラスター データをバックアップおよび復元する方法について説明します。
BRツールの概要 、特に使用制限とベストプラクティスを読んだことを確認してください。
BRコマンドラインの説明
brコマンドは、サブコマンド、オプション、およびパラメーターで構成されます。
- サブコマンド:
-または--のない文字。 - オプション:
-または--で始まる文字。 - パラメータ: 直後に続き、サブコマンドまたはオプションに渡される文字。
これは完全なbrのコマンドです。
br backup full --pd "${PDIP}:2379" -s "local:///tmp/backup"
上記のコマンドの説明は次のとおりです。
backup:brのサブコマンド。full:backupのサブコマンド。-s(または--storage): バックアップ ファイルが格納されるパスを指定するオプション。"local:///tmp/backup":-sのパラメーター。/tmp/backupは、各 TiKV ノードのバックアップ ファイルが保存されるローカル ディスク内のパスです。--pd: Placement Driver (PD) サービス アドレスを指定するオプション。"${PDIP}:2379":--pdのパラメーター。
ノート:
localのストレージを使用する場合、バックアップ データは各ノードのローカル ファイル システムに分散されます。データの復元を完了するには、これらのデータを手動で集約する必要があるため、本番環境でローカル ディスクにバックアップすることはお勧めしません。詳細については、 クラスタデータの復元を参照してください。
これらのバックアップデータを集約すると、冗長性が生じ、運用や保守に支障をきたす可能性があります。さらに悪いことに、これらのデータを集約せずにデータを復元すると、かなり紛らわしいエラー メッセージが表示される可能性があります
SST file not found。各ノードに NFS ディスクをマウントするか、
S3のオブジェクト ストレージにバックアップすることをお勧めします。
サブコマンド
brのコマンドは、サブコマンドの複数のレイヤーで構成されます。現在、 BRには次の 3 つのサブコマンドがあります。
br backup: TiDB クラスターのデータをバックアップするために使用されます。br restore: TiDB クラスターのデータを復元するために使用されます。
上記の 3 つのサブコマンドのそれぞれには、操作の範囲を指定する次の 3 つのサブコマンドが含まれる場合があります。
full: すべてのクラスター データのバックアップまたは復元に使用されます。db: クラスターの指定されたデータベースのバックアップまたは復元に使用されます。table: クラスターの指定されたデータベース内の単一のテーブルをバックアップまたは復元するために使用されます。
共通オプション
--pd: 接続に使用され、PDサーバーのアドレスを指定します。たとえば、"${PDIP}:2379"です。-h(または--help): すべてのサブコマンドのヘルプを取得するために使用されます。たとえば、br backup --helpです。-V(または--version): BRのバージョンを確認するために使用されます。--ca: 信頼できる CA 証明書へのパスを PEM 形式で指定します。--cert: SSL 証明書へのパスを PEM 形式で指定します。--key: SSL 証明書キーへのパスを PEM 形式で指定します。--status-addr: BRが Prometheus に統計情報を提供するためのリスニング アドレスを指定します。
BRコマンドラインを使用してクラスター データをバックアップする
クラスター データをバックアップするには、 br backupコマンドを使用します。 fullまたはtableサブコマンドを追加して、バックアップ操作の範囲 (クラスター全体または単一のテーブル) を指定できます。
すべてのクラスター データをバックアップする
すべてのクラスタ データをバックアップするには、 br backup fullコマンドを実行します。このコマンドのヘルプを表示するには、 br backup full -hまたはbr backup full --helpを実行します。
使用例:
すべてのクラスター データを各 TiKV ノードの/tmp/backupパスにバックアップし、 backupmetaファイルをこのパスに書き込みます。
ノート:
バックアップ ディスクとサービス ディスクが異なる場合、オンライン バックアップでは、全速バックアップの場合、読み取り専用オンライン サービスの QPS が約 15% ~ 25% 低下することがテストされています。 QPS への影響を減らしたい場合は、
--ratelimitを使用してレートを制限します。バックアップ ディスクとサービス ディスクが同じ場合、バックアップはサービスと I/O リソースを競合します。これにより、読み取り専用オンライン サービスの QPS が半分以上低下する可能性があります。したがって、オンライン サービス データを TiKV データ ディスクにバックアップすることは強くお勧めしません。
br backup full \
--pd "${PDIP}:2379" \
--storage "local:///tmp/backup" \
--ratelimit 128 \
--log-file backupfull.log
上記のコマンドのいくつかのオプションの説明は次のとおりです。
--ratelimit: 各 TiKV ノードでバックアップ操作が実行される最大速度 (MiB/秒) を指定します。--log-file: BRログをbackupfull.logファイルに書き込むことを指定します。
バックアップ中はターミナルに進行状況バーが表示されます。プログレス バーが 100% まで進むと、バックアップは完了です。次に、 BRはバックアップ データもチェックして、データの安全性を確保します。プログレスバーは次のように表示されます。
br backup full \
--pd "${PDIP}:2379" \
--storage "local:///tmp/backup" \
--ratelimit 128 \
--log-file backupfull.log
Full Backup <---------/................................................> 17.12%.
データベースのバックアップ
クラスタ内のデータベースをバックアップするには、 br backup dbコマンドを実行します。このコマンドのヘルプを表示するには、 br backup db -hまたはbr backup db --helpを実行します。
使用例:
testデータベースのデータを各 TiKV ノードの/tmp/backupパスにバックアップし、 backupmetaファイルをこのパスに書き込みます。
br backup db \
--pd "${PDIP}:2379" \
--db test \
--storage "local:///tmp/backup" \
--ratelimit 128 \
--log-file backupdb.log
上記のコマンドで、 --dbはバックアップするデータベースの名前を指定します。その他のオプションの説明については、 すべてのクラスター データをバックアップするを参照してください。
バックアップ中はターミナルに進行状況バーが表示されます。プログレス バーが 100% まで進むと、バックアップは完了です。次に、 BRはバックアップ データもチェックして、データの安全性を確保します。
テーブルをバックアップする
クラスタ内の単一のテーブルのデータをバックアップするには、 br backup tableコマンドを実行します。このコマンドのヘルプを表示するには、 br backup table -hまたはbr backup table --helpを実行します。
使用例:
test.usertableテーブルのデータを各 TiKV ノードの/tmp/backupパスにバックアップし、 backupmetaファイルをこのパスに書き込みます。
br backup table \
--pd "${PDIP}:2379" \
--db test \
--table usertable \
--storage "local:///tmp/backup" \
--ratelimit 128 \
--log-file backuptable.log
tableサブコマンドには 2 つのオプションがあります。
--db: データベース名を指定します--table: テーブル名を指定します。
その他のオプションの説明については、 すべてのクラスター データをバックアップするを参照してください。
バックアップ操作中は、進行状況バーがターミナルに表示されます。プログレス バーが 100% まで進むと、バックアップは完了です。次に、 BRはバックアップ データもチェックして、データの安全性を確保します。
テーブルフィルターでバックアップ
より複雑な条件で複数のテーブルをバックアップするには、 br backup fullコマンドを実行し、 --filterまたは-fでテーブル フィルターを指定します。
使用例:
次のコマンドは、フォームdb*.tbl*のすべてのテーブルのデータを各 TiKV ノードの/tmp/backupパスにバックアップし、 backupmetaファイルをこのパスに書き込みます。
br backup full \
--pd "${PDIP}:2379" \
--filter 'db*.tbl*' \
--storage "local:///tmp/backup" \
--ratelimit 128 \
--log-file backupfull.log
データを Amazon S3 バックエンドにバックアップする
データをlocalストレージではなく Amazon S3 バックエンドにバックアップする場合は、 storageサブコマンドで S3 ストレージ パスを指定し、 BRノードと TiKV ノードが Amazon S3 にアクセスできるようにする必要があります。
AWS 公式ドキュメントを参照して、指定されたRegionで S3 Bucketを作成できます。また、別のAWS 公式ドキュメントを参照してBucketにFolderを作成することもできます。
ノート:
1 つのバックアップを完了するには、通常、TiKV とBRは
s3:ListBucket、s3:PutObject、およびs3:AbortMultipartUploadの最小権限を必要とします。
S3 バックエンドへのアクセス権限を持つアカウントのSecretKeyとAccessKeyをBRノードに渡します。ここでは、 SecretKeyとAccessKeyが環境変数として渡されます。次に、 BRを介して TiKV ノードに権限を渡します。
export AWS_ACCESS_KEY_ID=${AccessKey}
export AWS_SECRET_ACCESS_KEY=${SecretKey}
BRを使用してバックアップする場合は、パラメータ--s3.regionと--send-credentials-to-tikvを明示的に指定します。 --s3.regionは S3 が配置されている領域を示し、 --send-credentials-to-tikvは S3 へのアクセス権を TiKV ノードに渡すことを意味します。
br backup full \
--pd "${PDIP}:2379" \
--storage "s3://${Bucket}/${Folder}" \
--s3.region "${region}" \
--send-credentials-to-tikv=true \
--ratelimit 128 \
--log-file backupfull.log
増分データのバックアップ
増分バックアップする場合は、最後のバックアップのタイムスタンプを指定するだけで済みます--lastbackupts 。
増分バックアップには 2 つの制限があります。
- 増分バックアップは、以前の完全バックアップとは別のパスにある必要があります。
- GC (ガベージ コレクション) セーフポイントは
lastbackuptsの前にある必要があります。
(LAST_BACKUP_TS, current PD timestamp]間の増分データをバックアップするには、次のコマンドを実行します。
br backup full\
--pd ${PDIP}:2379 \
--ratelimit 128 \
-s local:///home/tidb/backupdata/incr \
--lastbackupts ${LAST_BACKUP_TS}
最後のバックアップのタイムスタンプを取得するには、 validateコマンドを実行します。例えば:
LAST_BACKUP_TS=`br validate decode --field="end-version" -s local:///home/tidb/backupdata | tail -n1`
上記の例では、増分バックアップ データの場合、 BRは(LAST_BACKUP_TS, current PD timestamp]の間のデータ変更と DDL 操作を記録します。データを復元するとき、 BRは最初に DDL 操作を復元し、次にデータを復元します。
バックアップ中にデータを暗号化する (実験的機能)
TiDB v5.3.0 以降、TiDB はバックアップの暗号化をサポートしています。次のパラメータを構成して、バックアップ中にデータを暗号化できます。
--crypter.method: 暗号化アルゴリズム。 3 つのアルゴリズムをサポートaes128-ctr/aes192-ctr/aes256-ctr。デフォルト値はplaintextで、暗号化なしを示します。--crypter.key: 16 進文字列形式の暗号化キー。aes128-ctrは 128 ビット (16 バイト) のキー長を意味し、aes192-ctrは 24 バイトを意味し、aes256-ctrは 32 バイトを意味します。--crypter.key-file: 鍵ファイル。 「crypter.key」を渡さずに、キーが保存されているファイルパスをパラメーターとして直接渡すことができます
バックアップ暗号化の構成例は次のとおりです。
br backup full\
--pd ${PDIP}:2379 \
-s local:///home/tidb/backupdata/incr \
--crypter.method aes128-ctr \
--crypter.key 0123456789abcdef0123456789abcdef
Raw KV のバックアップ (実験的機能)
一部のシナリオでは、TiKV は TiDB とは独立して実行される場合があります。そのため、 BRは TiDBレイヤーのバイパスと TiKV でのデータのバックアップもサポートしています。
たとえば、次のコマンドを実行して、デフォルト CF の[0x31, 0x3130303030303030)から$BACKUP_DIRまでのすべてのキーをバックアップできます。
br backup raw --pd $PD_ADDR \
-s "local://$BACKUP_DIR" \
--start 31 \
--ratelimit 128 \
--end 3130303030303030 \
--format hex \
--cf default
ここで、 --startと--endのパラメータは、TiKV に送信される前に--formatで指定された方法を使用してデコードされます。現在、次の方法が利用可能です。
- "raw": 入力文字列はバイナリ形式のキーとして直接エンコードされます。
- "hex": デフォルトのエンコード方法。入力文字列は 16 進数として扱われます。
- "escape": 最初に入力文字列をエスケープしてから、バイナリ形式にエンコードします。
BRコマンドラインを使用してクラスター データを復元する
クラスター データを復元するには、 br restoreコマンドを使用します。 full 、 dbまたはtableサブコマンドを追加して、復元の範囲 (クラスター全体、データベース、または単一のテーブル) を指定できます。
ノート:
ローカル ストレージを使用する場合は、すべてのバックアップ SST ファイルを
--storageで指定されたパス内のすべての TiKV ノードにコピーする必要があります。各 TiKV ノードが最終的にすべての SST ファイルの一部のみを読み取る必要がある場合でも、次の理由により、すべてのノードが完全なアーカイブへのフル アクセスを必要とします。
- データは複数のピアに複製されます。 SST を取り込む場合、これらのファイルはすべてのピアに存在する必要があります。これは、単一ノードからの読み取りで十分なバックアップとは異なります。
- 復元中に各ピアが分散する場所はランダムです。どのノードがどのファイルを読み取るかは事前にわかりません。
これらは、ローカル パスに NFS をマウントする、または S3 を使用するなど、共有ストレージを使用することで回避できます。ネットワーク ストレージを使用すると、すべてのノードがすべての SST ファイルを自動的に読み取ることができるため、これらの警告は適用されなくなります。
また、1 つのクラスターに対して同時に実行できる復元操作は 1 つだけであることに注意してください。そうしないと、予期しない動作が発生する可能性があります。詳細については、 FAQを参照してください。
すべてのバックアップ データを復元する
すべてのバックアップ データをクラスターに復元するには、 br restore fullコマンドを実行します。このコマンドのヘルプを表示するには、 br restore full -hまたはbr restore full --helpを実行します。
使用例:
/tmp/backupパスのすべてのバックアップ データをクラスターに復元します。
br restore full \
--pd "${PDIP}:2379" \
--storage "local:///tmp/backup" \
--ratelimit 128 \
--log-file restorefull.log
上記のコマンドのいくつかのオプションの説明は次のとおりです。
--ratelimit: 各 TiKV ノードで復元操作が実行される最大速度 (MiB/秒) を指定します。--log-file: BRログをrestorefull.logファイルに書き込むことを指定します。
復元中はターミナルに進行状況バーが表示されます。プログレス バーが 100% まで進むと、復元は完了です。次に、 BRはバックアップ データもチェックして、データの安全性を確保します。
br restore full \
--pd "${PDIP}:2379" \
--storage "local:///tmp/backup" \
--ratelimit 128 \
--log-file restorefull.log
Full Restore <---------/...............................................> 17.12%.
データベースを復元する
データベースをクラスターに復元するには、 br restore dbコマンドを実行します。このコマンドのヘルプを表示するには、 br restore db -hまたはbr restore db --helpを実行します。
使用例:
/tmp/backupパスにバックアップされたデータベースをクラスターに復元します。
br restore db \
--pd "${PDIP}:2379" \
--db "test" \
--ratelimit 128 \
--storage "local:///tmp/backup" \
--log-file restoredb.log
上記のコマンドで、 --dbは復元するデータベースの名前を指定します。その他のオプションの説明については、 すべてのバックアップ データを復元する ) を参照してください。
ノート:
バックアップデータを復元する場合、
--dbで指定するデータベースの名前は、バックアップコマンドの-- dbで指定するデータベースの名前と同じでなければなりません。そうしないと、復元は失敗します。これは、バックアップ データのメタファイル (backupmetaファイル) にデータベース名が記録されているためです。同じ名前のデータベースにしかデータを復元できません。推奨される方法は、バックアップ データを別のクラスター内の同じ名前のデータベースに復元することです。
テーブルを復元する
1 つのテーブルをクラスターに復元するには、 br restore tableコマンドを実行します。このコマンドのヘルプを表示するには、 br restore table -hまたはbr restore table --helpを実行します。
使用例:
/tmp/backupパスにバックアップされたテーブルをクラスターに復元します。
br restore table \
--pd "${PDIP}:2379" \
--db "test" \
--table "usertable" \
--ratelimit 128 \
--storage "local:///tmp/backup" \
--log-file restoretable.log
上記のコマンドで、 --tableは復元するテーブルの名前を指定します。その他のオプションの説明については、 すべてのバックアップ データを復元するおよびデータベースを復元するを参照してください。
テーブルフィルターで復元
より複雑な条件で複数のテーブルを復元するには、 br restore fullコマンドを実行し、 --filterまたは-fでテーブル フィルターを指定します。
使用例:
次のコマンドは、 /tmp/backupパスでバックアップされたテーブルのサブセットをクラスターに復元します。
br restore full \
--pd "${PDIP}:2379" \
--filter 'db*.tbl*' \
--storage "local:///tmp/backup" \
--log-file restorefull.log
Amazon S3 バックエンドからデータを復元する
localのストレージではなく Amazon S3 バックエンドからデータを復元する場合は、 storageサブコマンドで S3 ストレージ パスを指定し、 BRノードと TiKV ノードが Amazon S3 にアクセスできるようにする必要があります。
ノート:
1 回の復元を完了するには、通常、TiKV とBRは
s3:ListBucketとs3:GetObjectの最小権限が必要です。
S3 バックエンドへのアクセス権限を持つアカウントのSecretKeyとAccessKeyをBRノードに渡します。ここでは、 SecretKeyとAccessKeyが環境変数として渡されます。次に、 BRを介して TiKV ノードに権限を渡します。
export AWS_ACCESS_KEY_ID=${AccessKey}
export AWS_SECRET_ACCESS_KEY=${SecretKey}
BRを使用してデータを復元する場合は、パラメータ--s3.regionと--send-credentials-to-tikvを明示的に指定します。 --s3.regionは S3 が配置されている領域を示し、 --send-credentials-to-tikvは S3 へのアクセス権を TiKV ノードに渡すことを意味します。
パラメータ--storageのBucketとFolderは、S3 バケットと、復元するデータが配置されているフォルダを表します。
br restore full \
--pd "${PDIP}:2379" \
--storage "s3://${Bucket}/${Folder}" \
--s3.region "${region}" \
--ratelimit 128 \
--send-credentials-to-tikv=true \
--log-file restorefull.log
上記のコマンドで、 --tableは復元するテーブルの名前を指定します。その他のオプションの説明については、 データベースを復元するを参照してください。
増分データの復元
増分データの復元はBRを使用して完全なデータを復元するに似ています。増分データを復元する場合は、 last backup tsより前にバックアップされたすべてのデータがターゲット クラスターに復元されていることを確認してください。
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
復元中にデータを復号化する (実験的機能)
バックアップ データを暗号化したら、対応する復号化パラメータを渡してデータを復元する必要があります。復号化パラメーターと暗号化パラメーターが一貫していることを確認する必要があります。復号化アルゴリズムまたはキーが正しくない場合、データは復元できません。
以下は、バックアップ データの復号化の例です。
br restore full\
--pd ${PDIP}:2379 \
-s local:///home/tidb/backupdata/incr \
--crypter.method aes128-ctr \
--crypter.key 0123456789abcdef0123456789abcdef
Raw KV の復元 (実験的機能)
Raw KV のバックアップと同様に、次のコマンドを実行して Raw KV を復元できます。
br restore raw --pd $PD_ADDR \
-s "local://$BACKUP_DIR" \
--start 31 \
--end 3130303030303030 \
--ratelimit 128 \
--format hex \
--cf default
上記の例では、範囲[0x31, 0x3130303030303030)のバックアップされたすべてのキーが TiKV クラスターに復元されます。これらのキーのコーディング方法は、 バックアップ プロセス中のキーの方法と同じです。
オンライン復元 (実験的機能)
データの復元中に書き込みすぎるデータは、オンライン クラスターのパフォーマンスに影響します。この影響をできるだけ回避するために、 BRは配置ルールをサポートしてリソースを分離します。この場合、SST のダウンロードとインポートは、指定されたいくつかのノード (または略して「ノードの復元」) でのみ実行されます。オンライン復元を完了するには、次の手順を実行します。
PD を構成し、配置ルールを開始します。
echo "config set enable-placement-rules true" | pd-ctlTiKV で「復元ノード」の構成ファイルを編集し、
serverの構成項目に「復元」を指定します。[server] labels = { exclusive = "restore" }「リストア ノード」の TiKV を起動し、バックアップしたファイルをBRを使用してリストアします。オフライン リストアと比較して、
--onlineのフラグを追加するだけで済みます。br restore full \ -s "local://$BACKUP_DIR" \ --ratelimit 128 \ --pd $PD_ADDR \ --online