タイムスタンプへのフラッシュバック クラスタ
TiDB v6.4.0 ではFLASHBACK CLUSTER TO TIMESTAMP構文が導入されています。これを使用して、クラスターを特定の時点に復元できます。
ノート:
FLASHBACK CLUSTER TO TIMESTAMPの動作原理は、特定の時点の古いデータを最新のタイムスタンプで書き込むことであり、現在のデータは削除しません。したがって、この機能を使用する前に、古いデータと現在のデータ用の十分なstorage容量があることを確認する必要があります.
構文
FLASHBACK CLUSTER TO TIMESTAMP '2022-09-21 16:02:50';
あらすじ
- FlashbackToTimestampStmt
FlashbackToTimestampStmt ::=
"FLASHBACK" "CLUSTER" "TO" "TIMESTAMP" stringLit
ノート
FLASHBACKステートメントで指定された時間は、ガベージ コレクション (GC) の有効期間内である必要があります。システム変数tidb_gc_life_time(デフォルト:10m0s) は、以前のバージョンの行の保持時間を定義します。ガベージコレクションが実行された場所の現在のsafePointは、次のクエリで取得できます。SELECT * FROM mysql.tidb WHERE variable_name = 'tikv_gc_safe_point';FLASHBACK CLUSTERSQL ステートメントを実行できるのは、SUPER権限を持つユーザーだけです。FLASHBACK文で指定した時刻からFLASHBACK文を実行する時刻までの間に、関連するテーブル構造を変更するDDL文があってはなりません。そのような DDL が存在する場合、TiDB はそれを拒否します。FLASHBACK CLUSTER TO TIMESTAMPを実行する前に、TiDB は関連するすべての接続を切断し、FLASHBACKステートメントが完了するまでこれらのテーブルに対する読み取りおよび書き込み操作を禁止します。FLASHBACK CLUSTER TO TIMESTAMPステートメントは、実行後にキャンセルできません。 TiDB は成功するまで再試行を続けます。
例
次の例は、新しく挿入されたデータを復元する方法を示しています。
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ステートメントで指定された時刻からFLASHBACKステートメントが実行される時刻までにテーブル構造を変更する DDL ステートメントがある場合、 FLASHBACKステートメントは失敗します。
mysql> SELECT now();
+---------------------+
| now() |
+---------------------+
| 2022-10-09 16:40:51 |
+---------------------+
1 row in set (0.01 sec)
mysql> CREATE TABLE t(a int);
Query OK, 0 rows affected (0.12 sec)
mysql> FLASHBACK CLUSTER TO TIMESTAMP '2022-10-09 16:40:51';
ERROR 1105 (HY000): Detected schema change due to another DDL job during [2022-10-09 16:40:51 +0800 CST, now), 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 拡張です。