バックアップ
このステートメントは、TiDB クラスターの分散バックアップを実行するために使用されます。
BACKUP
ステートメントはBRツールと同じエンジンを使用しますが、バックアップ プロセスは別のBRツールではなく TiDB 自体によって実行されます。BR のすべての利点と警告は、このステートメントにも適用されます。
BACKUP
を実行するには、 BACKUP_ADMIN
またはSUPER
権限が必要です。さらに、バックアップを実行する TiDB ノードとクラスター内のすべての TiKV ノードの両方に、宛先への読み取りまたは書き込み権限が必要です。9 Security強化モード有効になっている場合、ローカルstorage( local://
で始まるstorageパス) は許可されません。
BACKUP
ステートメントは、バックアップ タスク全体が完了するか、失敗するか、キャンセルされるまでブロックされます。 BACKUP
を実行するには、長時間持続する接続を準備する必要があります。 タスクは、 KILL TIDB QUERY
ステートメントを使用してキャンセルできます。
一度に実行できるのはBACKUP
とRESTORE
タスク 1 つだけです。同じ TiDBサーバーでBACKUP
またはRESTORE
ステートメントがすでに実行されている場合、新しいBACKUP
実行は、以前のすべてのタスクが完了するまで待機します。
BACKUP
「tikv」storageエンジンでのみ使用できます。「unistore」エンジンでBACKUP
を使用すると失敗します。
概要
- BackupStmt
- BRIETables
- BackupOption
- Boolean
- BackupTSO
BackupStmt ::=
"BACKUP" BRIETables "TO" stringLit BackupOption*
BRIETables ::=
"DATABASE" ( '*' | DBName (',' DBName)* )
| "TABLE" TableNameList
BackupOption ::=
"RATE_LIMIT" '='? LengthNum "MB" '/' "SECOND"
| "CONCURRENCY" '='? LengthNum
| "CHECKSUM" '='? Boolean
| "SEND_CREDENTIALS_TO_TIKV" '='? Boolean
| "LAST_BACKUP" '='? BackupTSO
| "SNAPSHOT" '='? ( BackupTSO | LengthNum TimestampUnit "AGO" )
Boolean ::=
NUM | "TRUE" | "FALSE"
BackupTSO ::=
LengthNum | stringLit
例
データベースをバックアップする
BACKUP DATABASE `test` TO 'local:///mnt/backup/2020/04/';
+------------------------------+-----------+-----------------+---------------------+---------------------+
| Destination | Size | BackupTS | Queue Time | Execution Time |
+------------------------------+-----------+-----------------+---------------------+---------------------+
| local:///mnt/backup/2020/04/ | 248665063 | 416099531454472 | 2020-04-12 23:09:48 | 2020-04-12 23:09:48 |
+------------------------------+-----------+-----------------+---------------------+---------------------+
1 row in set (58.453 sec)
上記の例では、 test
データベースがローカル ファイル システムにバックアップされます。データは、すべての TiDB ノードと TiKV ノードに分散された/mnt/backup/2020/04/
ディレクトリに SST ファイルとして保存されます。
上記の結果の最初の行は次のように説明されます。
カラム | 説明 |
---|---|
Destination | リンク先URL |
Size | バックアップアーカイブの合計サイズ(バイト単位) |
BackupTS | バックアップ作成時のスナップショットのTSO( 増分バックアップの場合に便利) |
Queue Time | BACKUP タスクがキューに入れられたときのタイムスタンプ (現在のタイムゾーン)。 |
Execution Time | BACKUP タスクの実行が開始されたときのタイムスタンプ (現在のタイム ゾーン)。 |
テーブルのバックアップ
BACKUP TABLE `test`.`sbtest01` TO 'local:///mnt/backup/sbtest01/';
BACKUP TABLE sbtest02, sbtest03, sbtest04 TO 'local:///mnt/backup/sbtest/';
クラスター全体をバックアップする
BACKUP DATABASE * TO 'local:///mnt/backup/full/';
システム テーブル ( mysql.*
PERFORMANCE_SCHEMA.*
…) INFORMATION_SCHEMA.*
バックアップに含まれないことに注意してください。
外部ストレージ
BR はS3 または GCS へのデータのバックアップをサポートしています。
BACKUP DATABASE `test` TO 's3://example-bucket-2020/backup-05/?access-key={YOUR_ACCESS_KEY}&secret-access-key={YOUR_SECRET_KEY}';
URL 構文については外部ストレージサービスの URI 形式でさらに詳しく説明します。
資格情報を配布しないクラウド環境で実行する場合は、 SEND_CREDENTIALS_TO_TIKV
オプションをFALSE
に設定します。
BACKUP DATABASE `test` TO 's3://example-bucket-2020/backup-05/'
SEND_CREDENTIALS_TO_TIKV = FALSE;
パフォーマンスの微調整
RATE_LIMIT
使用すると、TiKV ノードあたりの平均アップロード速度が制限され、ネットワーク帯域幅が削減されます。
バックアップが完了する前に、 BACKUP
クラスター上のデータに対してチェックサムを実行し、正確性を検証します。この検証が不要であると確信している場合は、 CHECKSUM
パラメータをFALSE
に設定してチェックを無効にすることができます。
テーブルとインデックスのバックアップのためにBRが実行できる同時タスクの数を指定するには、 CONCURRENCY
パラメータを使用します。このパラメータはBR内のスレッド プール サイズを制御し、バックアップ操作のパフォーマンスと効率を最適化します。
1 つのタスクは、バックアップ スキーマに従って、1 つのテーブル範囲または 1 つのインデックス範囲を表します。1 つのインデックスを持つ 1 つのテーブルの場合、このテーブルをバックアップするために 2 つのタスクが使用されます。デフォルト値CONCURRENCY
は4
です。多数のテーブルまたはインデックスをバックアップする必要がある場合は、値を増やします。
BACKUP DATABASE `test` TO 's3://example-bucket-2020/backup-06/'
RATE_LIMIT = 120 MB/SECOND
CONCURRENCY = 8
CHECKSUM = FALSE;
スナップショット
履歴データをバックアップするには、タイムスタンプ、TSO、または相対時間を指定します。
-- relative time
BACKUP DATABASE `test` TO 'local:///mnt/backup/hist01'
SNAPSHOT = 36 HOUR AGO;
-- timestamp (in current time zone)
BACKUP DATABASE `test` TO 'local:///mnt/backup/hist02'
SNAPSHOT = '2020-04-01 12:00:00';
-- timestamp oracle
BACKUP DATABASE `test` TO 'local:///mnt/backup/hist03'
SNAPSHOT = 415685305958400;
相対時間でサポートされている単位は次のとおりです。
- マイクロ秒
- 2番
- 分
- 時間
- 日
- 週
SQL 標準に従うと、単位は常に単数になることに注意してください。
増分バックアップ
最後のバックアップから現在のスナップショットまでの変更のみをバックアップするには、 LAST_BACKUP
オプションを指定します。
-- timestamp (in current time zone)
BACKUP DATABASE `test` TO 'local:///mnt/backup/hist02'
LAST_BACKUP = '2020-04-01 12:00:00';
-- timestamp oracle
BACKUP DATABASE `test` TO 'local:///mnt/backup/hist03'
LAST_BACKUP = 415685305958400;
MySQL 互換性
このステートメントは、MySQL 構文に対する TiDB 拡張です。