📣

TiDB Cloud Serverless が
Starter
に変わりました!このページは自動翻訳されたものです。
原文はこちらからご覧ください。

フラッシュバックテーブル

FLASHBACK TABLE構文は TiDB 4.0 以降で導入されました。3 ステートメントFLASHBACK TABLE使用すると、ガベージコレクション (GC) の有効期間中にDROPまたはTRUNCATE操作によって削除されたテーブルとデータを復元できます。

システム変数tidb_gc_life_time (デフォルト: 10m0s )は、以前のバージョンの行の保持期間を定義します。ガベージコレクションが実行された現在のsafePoint間は、次のクエリで取得できます。

SELECT * FROM mysql.tidb WHERE variable_name = 'tikv_gc_safe_point';

tikv_gc_safe_point回目以降にDROPまたはTRUNCATEステートメントでテーブルが削除されている限り、 FLASHBACK TABLEステートメントを使用してテーブルを復元できます。

構文

FLASHBACK TABLE table_name [TO other_table_name]

概要

FlashbackTableStmt
FLASHBACKTABLETableNameFlashbackToNewName
TableName
Identifier.Identifier
FlashbackToNewName
TOIdentifier

注記

テーブルが削除され、GCの有効期間が過ぎた場合、 FLASHBACK TABLEステートメントを使用して削除されたデータを回復することはできなくなります。そうでない場合は、 Can't find dropped / truncated table 't' in GC safe point 2020-03-16 16:34:52 +0800 CSTようなエラーが返されます。

  • DROP操作で削除されたテーブル データを回復します。

    DROP TABLE t;
    FLASHBACK TABLE t;
  • 操作TRUNCATEで削除されたテーブルデータを復元します。切り捨てられたテーブルtまだ存在するため、復元するテーブルt名前を変更する必要があります。変更しないと、テーブルt既に存在するためエラーが返されます。

    TRUNCATE TABLE t;
    FLASHBACK TABLE t TO t1;

実施原則

テーブルを削除する際、TiDBはテーブルメタデータのみを削除し、削除対象のテーブルデータ(行データとインデックスデータ)をmysql.gc_delete_rangeテーブルに書き込みます。TiDBのバックグラウンドにあるGCワーカーは、GCの有効期間を超えたキーをmysql.gc_delete_rangeテーブルから定期的に削除します。

したがって、テーブルをリカバリするには、GCワーカーがテーブルデータを削除する前に、テーブルメタデータをリカバリし、 mysql.gc_delete_rangeのテーブルから対応する行レコードを削除するだけで済みます。テーブルメタデータのリカバリには、TiDBのスナップショット読み取りを使用できます。スナップショット読み取りの詳細については、 履歴データを読むを参照してください。

FLASHBACK TABLE t TO t1の作業工程は以下のとおりです。

  1. TiDBは最近のDDL履歴ジョブを検索し、テーブルtで最初のDDL操作(タイプDROP TABLEまたはタイプtruncate tableを見つけます。TiDBが見つけられなかった場合は、エラーが返されます。
  2. TiDBは、DDLジョブの開始時刻がtikv_gc_safe_pointより前かどうかを確認します。3 tikv_gc_safe_point前の場合、 DROPまたはTRUNCATE操作で削除されたテーブルがGCによってクリーンアップされたことを意味し、エラーが返されます。
  3. TiDB は、DDL ジョブの開始時刻をスナップショットとして使用して、履歴データを読み取り、テーブル メタデータを読み取ります。
  4. TiDB はmysql.gc_delete_rangeのテーブルtに関連する GC タスクを削除します。
  5. TiDBはテーブルのメタデータのname t1に変更し、このメタデータを使用して新しいテーブルを作成します。テーブル名のみが変更され、テーブルIDは変更されないことに注意してください。テーブルIDは、以前に削除されたテーブルtと同じです。

上記のプロセスから、TiDBは常にテーブルのメタデータに対して操作を行い、テーブルのユーザーデータは変更されていないことがわかります。復元されたテーブルt1 、以前に削除されたテーブルtと同じIDを持つため、テーブルt1 tのユーザーデータを読み取ることができます。

注記:

復元されたテーブルの ID は削除されたテーブルの ID と同じであり、TiDB では既存のすべてのテーブルにグローバルに一意のテーブル ID が必要であるため、 FLASHBACKステートメントを使用して同じ削除されたテーブルを複数回復元することはできません。

FLASHBACK TABLE操作は、TiDBがスナップショット読み取りによってテーブルメタデータを取得し、 CREATE TABLEと同様のテーブル作成プロセスを実行することで実行されます。したがって、 FLASHBACK TABLE本質的には一種のDDL操作です。

MySQLの互換性

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

このページは役に立ちましたか?