TiDB ログ バックアップと PITR コマンド マニュアル
このドキュメントでは、TiDB ログ バックアップとポイントインタイム リカバリ (PITR) で使用されるコマンドについて説明します。
ログ バックアップと PITR の詳細については、以下を参照してください。
ログバックアップを実行する
tiup br log
コマンドを使用してログ バックアップを開始および管理できます。
tiup br log --help
backup stream log from TiDB/TiKV cluster
Usage:
br log [command]
Available Commands:
metadata get the metadata of log dir
pause pause a log backup task
resume resume a log backup task
start start a log backup task
status get status for the log backup task
stop stop a log backup task
truncate truncate the log data until sometime
各サブコマンドの説明は次のとおりです。
tiup br log start
: ログ バックアップ タスクを開始します。tiup br log status
: ログ バックアップ タスクのステータスを照会します。tiup br log pause
: ログ バックアップ タスクを一時停止します。tiup br log resume
: 一時停止されたログ バックアップ タスクを再開します。tiup br log stop
: ログ バックアップ タスクを停止し、タスク メタデータを削除します。tiup br log truncate
: バックアップstorageからログバックアップデータをクリーンアップします。tiup br log metadata
: ログ バックアップ データのメタデータを照会します。
ログバックアップタスクを開始する
tiup br log start
コマンドを実行して、ログ バックアップ タスクを開始できます。このタスクは TiDB クラスターのバックグラウンドで実行され、KVstorageの変更ログをバックアップstorageに自動的にバックアップします。
ヘルプ情報を表示するには、 tiup br log start --help
実行します。
tiup br log start --help
start a log backup task
Usage:
br log start [flags]
Flags:
-h, --help help for start
--start-ts string usually equals last full backupTS, used for backup log. Default value is current ts. support TSO or datetime, e.g. '400036290571534337' or '2018-05-11 01:42:23+0800'.
--task-name string The task name for the backup log task.
Global Flags:
--ca string CA certificate path for TLS connection
--cert string Certificate path for TLS connection
--key string Private key path for TLS connection
-u, --pd strings PD address (default [127.0.0.1:2379])
-s, --storage string specify the url where backup storage, eg, "s3://bucket/path/prefix"
出力例には共通パラメータのみが表示されます。これらのパラメータの説明は次のとおりです。
--start-ts
: ログ バックアップの開始タイムスタンプを指定します。このパラメータが指定されていない場合、バックアップ プログラムは現在の時刻をstart-ts
として使用します。task-name
: ログ バックアップのタスク名を指定します。この名前は、バックアップ タスクのクエリ、一時停止、再開にも使用されます。--ca
: TiKVおよびPDと通信するためのmTLS暗号--key
方式--cert
指定します。--pd
: バックアップ クラスターの PD アドレスを指定します。BRは、ログ バックアップ タスクを開始するために PD にアクセスする必要があります。--storage
: バックアップstorageアドレスを指定します。現在、 BR はログ バックアップのstorageとして Amazon S3、Google Cloud Storage (GCS)、または Azure Blob Storage をサポートしています。上記のコマンドでは、例として Amazon S3 を使用しています。詳細については、 外部ストレージサービスの URI 形式参照してください。
使用例:
tiup br log start \
--task-name=pitr \
--pd="${PD_IP}:2379" \
--storage='s3://backup-101/logbackup?access-key=${access-key}&secret-access-key=${secret-access-key}'
ログバックアップデータを暗号化する
BR を使用すると、ログ バックアップ データをバックアップstorageにアップロードする前に暗号化できます。
TiDB v8.4.0 以降では、ログ バックアップ コマンドで次のパラメータを渡すことで、ログ バックアップ データを暗号化できます。これはスナップショットバックアップ暗号化に似ています。
--log.crypter.method
: 暗号化アルゴリズム。aes128-ctr
、aes192-ctr
、またはaes256-ctr
になります。デフォルト値はplaintext
で、データが暗号化されていないことを示します。--log.crypter.key
: 16 進文字列形式の暗号化キー。アルゴリズムaes128-ctr
の場合は 128 ビット (16 バイト) のキー、アルゴリズムaes192-ctr
の場合は 24 バイトのキー、アルゴリズムaes256-ctr
の場合は 32 バイトのキーです。--log.crypter.key-file
: キー ファイルcrypter.key
を渡さずに、キーが保存されているファイル パスをパラメーターとして直接渡すことができます。
次に例を示します。
tiup br log start \
--task-name=pitr-with-encryption
--pd ${PD_IP}:2379 \
--storage "s3://${BACKUP_COLLECTION_ADDR}/snapshot-${DATE}?access-key=${AWS_ACCESS_KEY}&secret-access-key=${AWS_SECRET_ACCESS_KEY}" \
--log.crypter.method aes128-ctr \
--log.crypter.key 0123456789abcdef0123456789abcdef
ただし、セキュリティ要件が高いシナリオでは、固定の暗号化キーをコマンド ラインで直接渡すことは望ましくない場合があります。セキュリティをさらに強化するには、マスター キー ベースの暗号化システムを使用して暗号化キーを管理できます。このシステムは、異なるログ バックアップ ファイルを暗号化するために異なるデータ キーを生成し、マスター キーのローテーションをサポートします。次のパラメーターを使用して構成できます。
--master-key-crypter-method
: マスターキーに基づく暗号化アルゴリズム。aes128-ctr
、aes192-ctr
、またはaes256-ctr
になります。デフォルト値はplaintext
で、データが暗号化されていないことを示します。--master-key
: マスター キー構成。ローカル ディスクに保存されているマスター キー、またはクラウド キー管理サービス (KMS) によって管理されるマスター キーになります。
ローカル ディスクに保存されているマスター キーを使用して暗号化します。
tiup br log start \
--task-name=pitr-with-encryption \
--pd ${PD_IP}:2379 \
--storage "s3://${BACKUP_COLLECTION_ADDR}/snapshot-${DATE}?access-key=${AWS_ACCESS_KEY}&secret-access-key=${AWS_SECRET_ACCESS_KEY}" \
--master-key-crypter-method aes128-ctr \
--master-key "local:///path/to/master.key"
AWS KMS によって管理されるマスターキーを使用して暗号化します。
tiup br log start \
--task-name=pitr-with-encryption \
--pd ${PD_IP}:2379 \
--storage "s3://${BACKUP_COLLECTION_ADDR}/snapshot-${DATE}?access-key=${AWS_ACCESS_KEY}&secret-access-key=${AWS_SECRET_ACCESS_KEY}" \
--master-key-crypter-method aes128-ctr \
--master-key "aws-kms:///${AWS_KMS_KEY_ID}?AWS_ACCESS_KEY_ID=${AWS_ACCESS_KEY}&AWS_SECRET_ACCESS_KEY=${AWS_SECRET_ACCESS_KEY}®ION=${AWS_REGION}"
Google Cloud KMS によって管理されるマスターキーを使用して暗号化します。
tiup br log start \
--task-name=pitr-with-encryption \
--pd ${PD_IP}:2379 \
--storage "s3://${BACKUP_COLLECTION_ADDR}/snapshot-${DATE}?access-key=${AWS_ACCESS_KEY}&secret-access-key=${AWS_SECRET_ACCESS_KEY}" \
--master-key-crypter-method aes128-ctr \
--master-key "gcp-kms:///projects/$GCP_PROJECT_ID/locations/$GCP_LOCATION/keyRings/$GCP_KEY_RING/cryptoKeys/$GCP_KEY_NAME?AUTH=specified&CREDENTIALS=$GCP_CREDENTIALS_PATH"
注記:
- キーが失われると、ログ バックアップ データをクラスターに復元できなくなります。
- 暗号化機能は、
br
および TiDB クラスター v8.4.0 以降のバージョンで使用する必要があります。暗号化されたログ バックアップ データは、v8.4.0 より前のクラスターでは復元できません。
ログバックアップステータスを照会する
tiup br log status
コマンドを実行して、ログ バックアップの状態を照会できます。
ヘルプ情報を表示するには、 tiup br log status --help
実行します。
tiup br log status --help
get status for the log backup task
Usage:
br log status [flags]
Flags:
-h, --help help for status
--json Print JSON as the output.
--task-name string The task name for backup stream log. If default, get status of all of tasks (default "*")
Global Flags:
--ca string CA certificate path for TLS connection
--cert string Certificate path for TLS connection
--key string Private key path for TLS connection
-u, --pd strings PD address (default [127.0.0.1:2379])
出力例では、 task-name
使用してバックアップ タスクの名前を指定しています。デフォルト値は*
で、すべてのタスクのステータスを照会することを意味します。
使用例:
tiup br log status --task-name=pitr --pd="${PD_IP}:2379"
期待される出力:
● Total 1 Tasks.
> #1 <
name: pitr
status: ● NORMAL
start: 2022-07-14 20:08:03.268 +0800
end: 2090-11-18 22:07:45.624 +0800
storage: s3://backup-101/logbackup
speed(est.): 0.82 ops/s
checkpoint[global]: 2022-07-25 22:52:15.518 +0800; gap=2m52s
出力フィールドの説明は次のとおりです。
status
: バックアップ タスクのステータスNORMAL
、またはERROR
PAUSE
なります。start
: バックアップ タスクの開始時刻。バックアップ タスクの開始時に指定されるstart-ts
です。storage
: バックアップstorageアドレス。speed
: バックアップ タスクの合計 QPS。QPS は 1 秒あたりにバックアップされるログの数を意味します。checkpoint [global]
: このチェックポイントより前のすべてのデータがバックアップstorageにバックアップされます。これは、バックアップ データを復元するために使用できる最新のタイムスタンプです。error [store]
: ログ バックアップ プログラムがstorageノード上で検出したエラー。
ログバックアップタスクを一時停止して再開する
実行中のログ バックアップ タスクを一時停止するには、 tiup br log pause
コマンドを実行します。
ヘルプ情報を表示するには、 tiup br log pause --help
実行します。
tiup br log pause --help
pause a log backup task
Usage:
br log pause [flags]
Flags:
--gc-ttl int the TTL (in seconds) that PD holds for BR's GC safepoint (default 86400)
-h, --help help for status
--task-name string The task name for backup stream log.
Global Flags:
--ca string CA certificate path for TLS connection
--cert string Certificate path for TLS connection
--key string Private key path for TLS connection
-u, --pd strings PD address (default [127.0.0.1:2379])
注記:
- ログ バックアップ タスクが一時停止された後、変更ログを生成する MVCC データが削除されないように、バックアップ プログラムは現在のバックアップ チェックポイントをサービス セーフポイントとして自動的に設定し、最新の 24 時間以内の MVCC データを保持します。バックアップ タスクが 24 時間以上一時停止された場合、対応するデータはガベージ コレクションされ、バックアップされません。
- MVCC データを過剰に保持すると、TiDB クラスターのstorage容量とパフォーマンスに悪影響が及ぶ可能性があります。そのため、バックアップ タスクを適切なタイミングで再開することをお勧めします。
使用例:
tiup br log pause --task-name=pitr --pd="${PD_IP}:2379"
一時停止したバックアップ タスクを再開するには、 tiup br log resume
コマンドを実行します。
ヘルプ情報を表示するには、 tiup br log resume --help
実行します。
tiup br log resume --help
resume a log backup task
Usage:
br log resume [flags]
Flags:
-h, --help help for status
--task-name string The task name for backup stream log.
Global Flags:
--ca string CA certificate path for TLS connection
--cert string Certificate path for TLS connection
--key string Private key path for TLS connection
-u, --pd strings PD address (default [127.0.0.1:2379])
バックアップ タスクが 24 時間以上一時停止された後、 tiup br log resume
実行するとエラーが報告され、 BR はバックアップ データが失われたことを通知します。このエラーを処理するには、 バックアップと復元に関するよくある質問を参照してください。
使用例:
tiup br log resume --task-name=pitr --pd="${PD_IP}:2379"
ログバックアップタスクを停止して再開する
tiup br log stop
コマンドを実行してログ バックアップ タスクを停止し、元の--storage
ディレクトリを使用して停止したログ バックアップ タスクを再開できます。
ログバックアップタスクを停止する
ログ バックアップ タスクを停止するには、 tiup br log stop
コマンドを実行します。このコマンドは、バックアップ クラスター内のタスク メタデータをクリーンアップします。
ヘルプ情報を表示するには、 tiup br log stop --help
実行します。
tiup br log stop --help
stop a log backup task
Usage:
br log stop [flags]
Flags:
-h, --help help for status
--task-name string The task name for the backup log task.
Global Flags:
--ca string CA certificate path for TLS connection
--cert string Certificate path for TLS connection
--key string Private key path for TLS connection
-u, --pd strings PD address (default [127.0.0.1:2379])
注記:
このコマンドは注意して使用してください。ログ バックアップ タスクを一時停止する必要がある場合は、代わりに
tiup br log pause
とtiup br log resume
使用してください。
使用例:
tiup br log stop --task-name=pitr --pd="${PD_IP}:2379"
ログバックアップタスクを再開する
tiup br log stop
コマンドを実行してログ バックアップ タスクを停止した後、別の--storage
ディレクトリに新しいログ バックアップ タスクを作成するか、 tiup br log start
コマンドを実行して元の--storage
ディレクトリでログ バックアップ タスクを再開することができます。元の--storage
ディレクトリでタスクを再開する場合は、次の点に注意してください。
- タスクを再開するための
--storage
のディレクトリのパラメータは、停止されたタスクと同じである必要があります。 --start-ts
指定する必要はありません。BRは最後のバックアップ チェックポイントから自動的にバックアップを開始します。- タスクが長時間停止し、データの複数のバージョンがガベージ コレクションされた場合、タスクを再開しようとするとエラー
BR:Backup:ErrBackupGCSafepointExceeded
が報告されます。この場合、別の--storage
ディレクトリに新しいログ バックアップ タスクを作成する必要があります。
ログバックアップデータをクリーンアップする
tiup br log truncate
コマンドを実行して、古くなった、または不要になったログ バックアップ データをクリーンアップできます。
ヘルプ情報を表示するには、 tiup br log truncate --help
実行します。
tiup br log truncate --help
truncate the incremental log until sometime.
Usage:
br log truncate [flags]
Flags:
--dry-run Run the command but don't really delete the files.
-h, --help help for truncate
--until string Remove all backup data until this TS.(support TSO or datetime, e.g. '400036290571534337' or '2018-05-11 01:42:23+0800'.)
-y, --yes Skip all prompts and always execute the command.
Global Flags:
-s, --storage string specify the url where backup storage, eg, "s3://bucket/path/prefix"
このコマンドはバックアップstorageにのみアクセスし、TiDB クラスターにはアクセスしません。一部のパラメータは次のように記述されます。
--dry-run
: コマンドを実行しますが、実際にはファイルを削除しません。--until
: 指定されたタイムスタンプより前のすべてのログ バックアップ データを削除します。--storage
: バックアップstorageアドレス。現在、 BR はログバックアップのstorageとして Amazon S3、GCS、または Azure Blob Storage をサポートしています。詳細については外部ストレージサービスの URI 形式参照してください。
使用例:
tiup br log truncate --until='2022-07-26 21:20:00+0800' \
--storage='s3://backup-101/logbackup?access-key=${access-key}&secret-access-key=${secret-access-key}'
期待される出力:
Reading Metadata... DONE; take = 277.911599ms
We are going to remove 9 files, until 2022-07-26 21:20:00.0000.
Sure? (y/N) y
Clearing data files... DONE; take = 43.504161ms, kv-count = 53, kv-size = 4573(4.573kB)
Removing metadata... DONE; take = 24.038962ms
ログバックアップのメタデータをビュー
tiup br log metadata
コマンドを実行すると、復元できる最も古いタイムスタンプや最新のタイムスタンプなど、storageシステム内のログ バックアップ メタデータを表示できます。
ヘルプ情報を表示するには、 tiup br log metadata --help
実行します。
tiup br log metadata --help
get the metadata of log backup storage
Usage:
br log metadata [flags]
Flags:
-h, --help help for metadata
Global Flags:
-s, --storage string specify the url where backup storage, eg, "s3://bucket/path/prefix"
このコマンドはバックアップstorageにのみアクセスし、TiDB クラスターにはアクセスしません。
--storage
パラメータは、バックアップstorageのアドレスを指定するために使用されます。現在、 BR はログバックアップのstorageとして Amazon S3、GCS、または Azure Blob Storage をサポートしています。詳細については、 外部ストレージサービスの URI 形式参照してください。
使用例:
tiup br log metadata --storage='s3://backup-101/logbackup?access-key=${access-key}&secret-access-key=${secret-access-key}'
期待される出力:
[2022/07/25 23:02:57.236 +08:00] [INFO] [collector.go:69] ["log metadata"] [log-min-ts=434582449885806593] [log-min-date="2022-07-14 20:08:03.268 +0800"] [log-max-ts=434834300106964993] [log-max-date="2022-07-25 23:00:15.618 +0800"]
指定した時点への復元 (PITR)
注記:
restore point
の増分バックアップ アドレスとして--full-backup-storage
指定した場合、このバックアップと以前の増分バックアップを復元するには、増分バックアップが後続のログ バックアップと互換性を持つように、パラメータ--allow-pitr-from-incremental
をtrue
に設定する必要があります。
tiup br restore point
コマンドを実行して、新しいクラスターで PITR を実行するか、ログ バックアップ データを復元することができます。
ヘルプ情報を表示するには、 tiup br restore point --help
実行します。
tiup br restore point --help
restore data from log until specify commit timestamp
Usage:
br restore point [flags]
Flags:
--full-backup-storage string specify the backup full storage. fill it if want restore full backup before restore log.
-h, --help help for point
--restored-ts string the point of restore, used for log restore. support TSO or datetime, e.g. '400036290571534337' or '2018-05-11 01:42:23+0800'
--start-ts string the start timestamp which log restore from. support TSO or datetime, e.g. '400036290571534337' or '2018-05-11 01:42:23+0800'
Global Flags:
--ca string CA certificate path for TLS connection
--cert string Certificate path for TLS connection
--key string Private key path for TLS connection
-u, --pd strings PD address (default [127.0.0.1:2379])
-s, --storage string specify the url where backup storage, eg, "s3://bucket/path/prefix"
出力例には共通パラメータのみが表示されます。これらのパラメータの説明は次のとおりです。
--full-backup-storage
: スナップショット (フル) バックアップのstorageアドレス。PITR を使用するには、このパラメータを指定して、復元タイムスタンプより前の最新のスナップショット バックアップを選択します。ログ バックアップ データのみを復元する場合は、このパラメータを省略できます。リカバリ クラスターを初めて初期化するときは、スナップショット バックアップを指定する必要があることに注意してください。現在、 BR はログ バックアップのstorageとして Amazon S3、GCS、および Azure Blob Storage をサポートしています。詳細については、 外部ストレージサービスの URI 形式参照してください。--restored-ts
: データを復元するタイムスタンプ。このパラメータを指定しない場合、 BR はログ バックアップで使用可能な最新のタイムスタンプ、つまりバックアップ データのチェックポイントにデータを復元します。--start-ts
: ログ バックアップ データを復元する開始タイムスタンプ。ログ バックアップ データのみを復元する必要がある場合は、このパラメーターを指定する必要があります。--pd
: 復元クラスターの PD アドレス。--ca
: TiKVおよびPDと通信するためのmTLS暗号--key
方式--cert
指定します。--storage
: ログバックアップのstorageアドレス。現在、 BR はログバックアップのstorageとして Amazon S3、GCS、または Azure Blob Storage をサポートしています。詳細については外部ストレージサービスの URI 形式参照してください。
使用例:
tiup br restore point --pd="${PD_IP}:2379"
--storage='s3://backup-101/logbackup?access-key=${access-key}&secret-access-key=${secret-access-key}'
--full-backup-storage='s3://backup-101/snapshot-202205120000?access-key=${access-key}&secret-access-key=${secret-access-key}'
Full Restore <--------------------------------------------------------------------------------------------------------------------------------------------------------> 100.00%
*** ***["Full Restore success summary"] ****** [total-take=3.112928252s] [restore-data-size(after-compressed)=5.056kB] [Size=5056] [BackupTS=434693927394607136] [total-kv=4] [total-kv-size=290B] [average-speed=93.16B/s]
Restore Meta Files <--------------------------------------------------------------------------------------------------------------------------------------------------> 100.00%
Restore KV Files <----------------------------------------------------------------------------------------------------------------------------------------------------> 100.00%
"restore log success summary"] [total-take=192.955533ms] [restore-from=434693681289625602] [restore-to=434693753549881345] [total-kv-count=33] [total-size=21551]
注記:
- クラスターを初めて復元するときは、完全なスナップショット データを指定する必要があります。そうしないと、テーブル ID ルールの書き換えにより、新しく作成されたテーブルの一部のデータが不正確になる可能性があります。詳細については、GitHub の問題#54418を参照してください。
- 特定の期間のログバックアップデータを繰り返して復元することはできません。範囲
[t1=10, t2=20)
のログバックアップデータを繰り返して復元すると、復元されたデータに不整合が生じる可能性があります。- 異なる期間のログ データを複数のバッチで復元する場合は、ログ データが連続した順序で復元されるようにしてください。
[t1, t2)
、[t2, t3)
、[t3, t4)
のログ バックアップ データを連続した順序で復元すると、復元されたデータは一貫性を保ちます。 ただし、[t1, t2)
復元してから[t2, t3)
スキップして[t3, t4)
復元すると、復元されたデータは一貫性を失っている可能性があります。
暗号化されたログバックアップデータを復元する
暗号化されたログ バックアップ データを復元するには、復元コマンドで対応する復号化パラメータを渡す必要があります。復号化パラメータが暗号化に使用されたものと同じであることを確認してください。復号化アルゴリズムまたはキーが正しくない場合、データを復元することはできません。
次に例を示します。
tiup br restore point --pd="${PD_IP}:2379"
--storage='s3://backup-101/logbackup?access-key=${ACCESS-KEY}&secret-access-key=${SECRET-ACCESS-KEY}'
--full-backup-storage='s3://backup-101/snapshot-202205120000?access-key=${ACCESS-KEY}&secret-access-key=${SECRET-ACCESS-KEY}'
--crypter.method aes128-ctr
--crypter.key 0123456789abcdef0123456789abcdef
--log.crypter.method aes128-ctr
--log.crypter.key 0123456789abcdef0123456789abcdef
ログ バックアップがマスター キーを使用して暗号化されている場合は、次のコマンドを使用してバックアップ データを復号化して復元できます。
tiup br restore point --pd="${PD_IP}:2379"
--storage='s3://backup-101/logbackup?access-key=${ACCESS-KEY}&secret-access-key=${SECRET-ACCESS-KEY}'
--full-backup-storage='s3://backup-101/snapshot-202205120000?access-key=${ACCESS-KEY}&secret-access-key=${SECRET-ACCESS-KEY}'
--crypter.method aes128-ctr
--crypter.key 0123456789abcdef0123456789abcdef
--master-key-crypter-method aes128-ctr
--master-key "local:///path/to/master.key"