フラッシュバッククラスターからタイムスタンプへ

TiDB v6.4.0 ではFLASHBACK CLUSTER TO TIMESTAMP構文が導入されています。これを使用して、クラスターを特定の時点に復元できます。

ノート:

FLASHBACK CLUSTER TO TIMESTAMPの動作原理は、特定の時点の古いデータを最新のタイムスタンプで書き込み、現在のデータは削除しません。したがって、この機能を使用する前に、古いデータと現在のデータを保存するのに十分なstorage領域があることを確認する必要があります。

構文

FLASHBACK CLUSTER TO TIMESTAMP '2022-09-21 16:02:50';

あらすじ

FlashbackToTimestampStmt
FLASHBACKCLUSTERTOTIMESTAMPstringLit

ノート

  • FLASHBACKステートメントで指定する時間は、ガベージ コレクション (GC) の有効期間内である必要があります。システム変数tidb_gc_life_time (デフォルト: 10m0s ) は、以前のバージョンの行の保持時間を定義します。ガベージコレクションが実行された現在のsafePointの場所は、次のクエリで取得できます。

    SELECT * FROM mysql.tidb WHERE variable_name = 'tikv_gc_safe_point';
  • SUPER権限を持つユーザーのみがFLASHBACK CLUSTER SQL ステートメントを実行できます。
  • FLASHBACK CLUSTER ALTER TABLE ATTRIBUTEALTER TABLE REPLICACREATE PLACEMENT POLICYなどの PD 関連情報を変更する DDL ステートメントのロールバックをサポートしません。
  • FLASHBACKステートメントで指定された時点で、完全に実行されていない DDL ステートメントがあってはなりません。そのような DDL が存在する場合、TiDB はそれを拒否します。
  • FLASHBACK CLUSTER TO TIMESTAMPを実行する前に、TiDB は関連するすべての接続を切断し、ステートメントFLASHBACK CLUSTER完了するまでこれらのテーブルに対する読み取りおよび書き込み操作を禁止します。
  • FLASHBACK CLUSTER TO TIMESTAMPステートメントは実行後にキャンセルできません。 TiDB は成功するまで再試行を続けます。
  • FLASHBACK CLUSTERの実行中にデータをバックアップする必要がある場合は、 復元するのみを使用し、 FLASHBACK CLUSTERの開始時刻よりも前のBackupTSを指定できます。さらに、 FLASHBACK CLUSTERの実行中にログのバックアップを有効にすると失敗します。したがって、 FLASHBACK CLUSTERが完了した後でログのバックアップを有効にするようにしてください。
  • FLASHBACK CLUSTERステートメントによってメタデータ (テーブル構造、データベース構造) のロールバックが発生した場合、関連する変更は TiCDC によってレプリケートされませ。したがって、タスクを手動で一時停止し、 FLASHBACK CLUSTERの完了を待ち、アップストリームとダウンストリームのスキーマ定義を手動でレプリケートして、一貫性があることを確認する必要があります。その後、TiCDC 変更フィードを再作成する必要があります。
  • SUPER権限を持つユーザーのみがFLASHBACK CLUSTER SQL ステートメントを実行できます。
  • FLASHBACK CLUSTER ALTER TABLE ATTRIBUTEALTER TABLE REPLICACREATE PLACEMENT POLICYなどの PD 関連情報を変更する DDL ステートメントのロールバックをサポートしません。
  • FLASHBACKステートメントで指定された時点で、完全に実行されていない DDL ステートメントがあってはなりません。そのような DDL が存在する場合、TiDB はそれを拒否します。
  • FLASHBACK CLUSTER TO TIMESTAMPを実行する前に、TiDB は関連するすべての接続を切断し、ステートメントFLASHBACK CLUSTER完了するまでこれらのテーブルに対する読み取りおよび書き込み操作を禁止します。
  • FLASHBACK CLUSTER TO TIMESTAMPステートメントは実行後にキャンセルできません。 TiDB は成功するまで再試行を続けます。
  • FLASHBACK CLUSTERステートメントによってメタデータ (テーブル構造、データベース構造) のロールバックが発生した場合、関連する変更は TiCDC によってレプリケートされませ。したがって、タスクを手動で一時停止し、 FLASHBACK CLUSTERの完了を待ち、アップストリームとダウンストリームのスキーマ定義を手動でレプリケートして、一貫性があることを確認する必要があります。その後、TiCDC 変更フィードを再作成する必要があります。

次の例は、新しく挿入されたデータを復元する方法を示しています。

mysql> CREATE TABLE t(a INT); Query OK, 0 rows affected (0.09 sec) mysql> SELECT * FROM t; Empty set (0.01 sec) mysql> SELECT now(); +---------------------+ | now() | +---------------------+ | 2022-09-28 17:24:16 | +---------------------+ 1 row in set (0.02 sec) mysql> INSERT INTO t VALUES (1); Query OK, 1 row affected (0.02 sec) mysql> SELECT * FROM t; +------+ | a | +------+ | 1 | +------+ 1 row in set (0.01 sec) mysql> FLASHBACK CLUSTER TO TIMESTAMP '2022-09-28 17:24:16'; Query OK, 0 rows affected (0.20 sec) mysql> SELECT * FROM t; Empty set (0.00 sec)

FLASHBACKステートメントで指定された時間に完全に実行されていない DDL ステートメントがある場合、 FLASHBACKステートメントは失敗します。

mysql> ALTER TABLE t ADD INDEX k(a); Query OK, 0 rows affected (0.56 sec) mysql> ADMIN SHOW DDL JOBS 1; +--------+---------+-----------------------+------------------------+--------------+-----------+----------+-----------+---------------------+---------------------+---------------------+--------+ | JOB_ID | DB_NAME | TABLE_NAME | JOB_TYPE | SCHEMA_STATE | SCHEMA_ID | TABLE_ID | ROW_COUNT | CREATE_TIME | START_TIME | END_TIME | STATE | +--------+---------+-----------------------+------------------------+--------------+-----------+----------+-----------+---------------------+---------------------+---------------------+--------+ | 84 | test | t | add index /* ingest */ | public | 2 | 82 | 0 | 2023-01-29 14:33:11 | 2023-01-29 14:33:11 | 2023-01-29 14:33:12 | synced | +--------+---------+-----------------------+------------------------+--------------+-----------+----------+-----------+---------------------+---------------------+---------------------+--------+ 1 rows in set (0.01 sec) mysql> FLASHBACK CLUSTER TO TIMESTAMP '2023-01-29 14:33:12'; ERROR 1105 (HY000): Detected another DDL job at 2023-01-29 14:33:12 +0800 CST, can't do flashback

ログを通じて、 FLASHBACKの実行の進行状況を取得できます。以下は例です。

[2022/10/09 17:25:59.316 +08:00] [INFO] [cluster.go:463] ["flashback cluster stats"] ["complete regions"=9] ["total regions"=10] []

MySQLの互換性

このステートメントは、MySQL 構文に対する TiDB 拡張機能です。

Playground
新規
登録なしで TiDB の機能をワンストップでインタラクティブに体験できます。
製品
TiDB Cloud
TiDB
価格
PoC お問い合わせ
エコシステム
TiKV
TiFlash
OSS Insight
© 2023 PingCAP. All Rights Reserved.