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

バックアップ

このステートメントは、TiDBクラスタの分散バックアップを実行するために使用されます。

BACKUPのステートメントはBRツールと同じエンジンを使用しますが、バックアッププロセスが個別のBRツールではなくTiDB自体によって駆動される点が異なります。 BRのすべての利点と警告は、このステートメントにも適用されます。

BACKUPを実行するには、 BACKUP_ADMINまたはSUPERの特権が必要です。さらに、バックアップを実行するTiDBノードとクラスタのすべてのTiKVノードの両方に、宛先への読み取りまたは書き込み権限が必要です。 セキュリティ強化モードが有効になっている場合、ローカルストレージ( local://で始まるストレージパス)は許可されません。

BACKUPステートメントは、バックアップタスク全体が終了するか、失敗するか、キャンセルされるまでブロックされます。 BACKUPを実行するために、長期的な接続を準備する必要があります。タスクは、 KILL TIDB QUERYステートメントを使用してキャンセルできます。

一度に実行できるタスクはBACKUPつとRESTOREつだけです。 BACKUPまたはRESTOREステートメントが同じTiDBサーバーですでに実行されている場合、新しいBACKUPの実行は、前のすべてのタスクが終了するまで待機します。

BACKUPは、「tikv」ストレージエンジンでのみ使用できます。 「unistore」エンジンでBACKUPを使用すると失敗します。

あらすじ

BackupStmt
BACKUPBRIETablesTOstringLitBackupOption
BRIETables
DATABASE*DBName,TABLETableNameList
BackupOption
RATE_LIMIT=LengthNumMB/SECONDCONCURRENCY=LengthNumCHECKSUM=BooleanSEND_CREDENTIALS_TO_TIKV=BooleanLAST_BACKUP=BackupTSOSNAPSHOT=BackupTSOLengthNumTimestampUnitAGO
Boolean
NUMTRUEFALSE
BackupTSO
LengthNumstringLit

データベースをバックアップする

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 TimeBACKUPのタスクがキューに入れられたときのタイムスタンプ(現在のタイムゾーン)。
Execution TimeBACKUPのタスクが実行を開始したときのタイムスタンプ(現在のタイムゾーン)。

テーブルをバックアップする

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.*INFORMATION_SCHEMA.* )はバックアップに含まれないことに注意してPERFORMANCE_SCHEMA.*

外部ストレージ

BRは、S3またはGCSへのデータのバックアップをサポートしています。

BACKUP DATABASE `test` TO 's3://example-bucket-2020/backup-05/?region=us-west-2&access-key={YOUR_ACCESS_KEY}&secret-access-key={YOUR_SECRET_KEY}';

URL構文については、 外部ストレージで詳しく説明しています。

クレデンシャルを配布してはならないクラウド環境で実行する場合は、 SEND_CREDENTIALS_TO_TIKVオプションをFALSEに設定します。

BACKUP DATABASE `test` TO 's3://example-bucket-2020/backup-05/?region=us-west-2'
    SEND_CREDENTIALS_TO_TIKV = FALSE;

パフォーマンスの微調整

RATE_LIMITを使用して、TiKVノードごとの平均アップロード速度を制限し、ネットワーク帯域幅を減らします。

デフォルトでは、すべてのTiKVノードが4つのバックアップスレッドを実行します。この値は、 CONCURRENCYオプションで調整できます。

バックアップが完了する前に、 BACKUPはクラスタ上のデータに対してチェックサムを実行して、正確性を検証します。これが不要であると確信できる場合は、 CHECKSUMオプションを使用してこの手順を無効にすることができます。

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拡張です。

も参照してください