バックアップ
このステートメントは、TiDB クラスターの分散バックアップを実行するために使用されます。
BACKUPステートメントはBRツールと同じエンジンを使用しますが、バックアッププロセスは別のBRツールではなく TiDB 自体によって実行されますBRの利点と警告はすべてこのステートメントにも適用されます。
BACKUP実行するには、 BACKUP_ADMINまたはSUPER権限が必要です。さらに、バックアップを実行する TiDB ノードとクラスター内のすべての TiKV ノードの両方に、バックアップ先への読み取りまたは書き込み権限が必要です。9 Security強化モード有効になっている場合、ローカルstorage( local://で始まるstorageパス)は許可されません。
BACKUP文は、バックアップタスク全体が完了、失敗、またはキャンセルされるまでブロックされます。3 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 ::=
    "CHECKSUM" '='? Boolean
|   "CHECKSUM_CONCURRENCY" '='? LengthNum
|   "COMPRESSION_LEVEL" '='? LengthNum
|   "COMPRESSION_TYPE" '='? stringLit
|   "CONCURRENCY" '='? LengthNum
|   "IGNORE_STATS" '='? Boolean
|   "LAST_BACKUP" '='? BackupTSO
|   "RATE_LIMIT" '='? LengthNum "MB" '/' "SECOND"
|   "SEND_CREDENTIALS_TO_TIKV" '='? Boolean
|   "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指定すると、クラスタ上のデータに対してチェックサムが実行され、データの正確性が検証されます。単一テーブルに対するチェックサムタスクのデフォルトの同時実行数は 4 ですが、 CHECKSUM_CONCURRENCYパラメータを使用して調整できます。データ検証が不要であると確信できる場合は、 CHECKSUMパラメータをFALSEに設定することでチェックを無効化できます。
BR がテーブルとインデックスのバックアップに同時に実行できるタスクの数を指定するには、パラメータCONCURRENCY使用します。このパラメータはBR内のスレッドプールサイズを制御し、バックアップ操作のパフォーマンスと効率を最適化します。
1つのタスクは、バックアップスキーマに応じて、1つのテーブル範囲または1つのインデックス範囲を表します。1つのテーブルと1つのインデックスの場合、このテーブルのバックアップには2つのタスクが使用されます。デフォルト値はCONCURRENCYですが、 4です。多数のテーブルまたはインデックスをバックアップする必要がある場合は、この値を大きくしてください。
統計はデフォルトではバックアップされません。統計情報をバックアップするには、 IGNORE_STATSパラメータをFALSEに設定する必要があります。
デフォルトでは、バックアップによって生成されるSSTファイルはzstd圧縮アルゴリズムを使用します。必要に応じて、 COMPRESSION_TYPEパラメータを使用して別の圧縮アルゴリズムを指定できます。サポートされているアルゴリズムはlz4 zstd 。また、 COMPRESSION_LEVELパラメータを使用して圧縮レベルを調整することもできます。レベル番号が大きいほど圧縮率は高くなりますが、CPU消費量snappy増加します。
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 拡張です。