Skip to content

Latest commit

 

History

History
88 lines (58 loc) · 4.4 KB

File metadata and controls

88 lines (58 loc) · 4.4 KB
title RECOVER TABLE
summary TiDB データベースの RECOVER TABLE の使用法の概要。

テーブルの回復 {#recover-table}

RECOVER TABLEDROP TABLEステートメントが実行された後、GC (ガベージ コレクション) の有効期間内に削除されたテーブルとその上のデータを回復するために使用されます。

構文 {#syntax}

RECOVER TABLE table_name;
RECOVER TABLE BY JOB JOB_ID;

概要 {#synopsis}

RecoverTableStmt ::=
    'RECOVER' 'TABLE' ( 'BY' 'JOB' Int64Num | TableName Int64Num? )

TableName ::=
    Identifier ( '.' Identifier )?

Int64Num ::= NUM

NUM ::= intLit

注記:

テーブルが削除され、GCの有効期間が過ぎた場合、 RECOVER TABLEではテーブルを回復できません。このシナリオでRECOVER TABLE実行すると、 snapshot is older than GC safe point 2019-07-10 13:45:57 +0800 CSTようなエラーが返されます。

例 {#examples}

  • テーブル名に従って削除されたテーブルを回復します。

    DROP TABLE t;
    RECOVER TABLE t;

    このメソッドは、最近の DDL ジョブ履歴を検索し、 DROP TABLEタイプの最初の DDL 操作を見つけ、 RECOVER TABLEステートメントで指定された 1 つのテーブル名と同じ名前を持つ削除されたテーブルを回復します。

  • 使用されたテーブルDDL JOB IDに応じて、削除されたテーブルを回復します。

    テーブルt削除して別のtを作成し、さらに新しく作成したテーブルtを削除したとします。この場合、最初に削除したt復元するには、テーブルDDL JOB ID指定するメソッドを使用する必要があります。

    DROP TABLE t;
    ADMIN SHOW DDL JOBS 1;

    上記の2番目のステートメントは、テーブルのDDL JOB IDを検索してt削除するために使用されます。次の例では、IDは53です。

    +--------+---------+------------+------------+--------------+-----------+----------+-----------+-----------------------------------+--------+
    | JOB_ID | DB_NAME | TABLE_NAME | JOB_TYPE   | SCHEMA_STATE | SCHEMA_ID | TABLE_ID | ROW_COUNT | START_TIME                        | STATE  |
    +--------+---------+------------+------------+--------------+-----------+----------+-----------+-----------------------------------+--------+
    | 53     | test    |            | drop table | none         | 1         | 41       | 0         | 2019-07-10 13:23:18.277 +0800 CST | synced |
    +--------+---------+------------+------------+--------------+-----------+----------+-----------+-----------------------------------+--------+
    
    RECOVER TABLE BY JOB 53;

    このメソッドは、 DDL JOB IDを介して削除されたテーブルを回復します。対応するDDLジョブがDROP TABLEタイプでない場合は、エラーが発生します。

実施原則 {#implementation-principle}

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

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

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

MySQLの互換性 {#mysql-compatibility}

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