# FLASHBACK TABLE

+ 查询 DDL 操作时间戳
  + `admin show  ddl jobs;`

+ 设置 tidb_snapshot
  + `set @@tidb_snapshot="yyyy-mm-dd hh:mi:ss";`

+ 执行 Flashback 命令恢复数据（适用于 Drop 与 Truncate）
  + `FLASHBACK TABLE target_table_name [TO new_table_name]`

-------------------------------------------------------------

使用 FLASHBACK TABLE 语句来恢复被 DROP 或 TRUNCATE 删除的表以及数据的操作非常简单。语法如下：

1. 查询 DDL 操作时间戳
admin show  ddl jobs;

2. 设置 tidb_snapshot
set @@tidb_snapshot="yyyy-mm-dd hh:mi:ss";

3. 执行 Flashback 命令恢复数据
FLASHBACK TABLE target_table_name [TO new_table_name]

TiDB 在删除表时，实际上只删除了表的元信息，并将需要删除的表数据（行数据和索引数据）写一条数据到 mysql.gc_delete_range 表。TiDB 后台的 GC Worker 会定期从 mysql.gc_delete_range 表中取出超过 GC lifetime 相关范围的 key 进行删除。

所以，FLASHBACK TABLE 只需要在 GC Worker 还没删除表数据前，恢复表的元信息并删除 mysql.gc_delete_range 表中相应的行记录即可。恢复表的元信息可以用 TiDB 的快照读实现。