FLASHBACK CLUSTER TO TIMESTAMP

    注意

    FLASHBACK CLUSTER TO TIMESTAMP 是用最新的时间戳写入特定时间点的旧数据,但不会删除当前数据,所以在使用前请确保集群有足够的存储空间来同时容纳旧数据和当前数据。

    FlashbackToTimestampStmt

    1. FlashbackToTimestampStmt ::=
    2. "FLASHBACK" "CLUSTER" "TO" "TIMESTAMP" stringLit
    • FLASHBACK 指定的时间点需要在 Garbage Collection (GC) life time 时间内。你可以使用系统变量 配置数据的历史版本的保留时间(默认值是 10m0s)。可以使用以下 SQL 语句查询当前的 safePoint,即 GC 已经清理到的时间点:

    • 执行 FLASHBACK CLUSTER SQL 语句的用户需要有 SUPER 权限。

    • FLASHBACK 指定的时间点到开始执行的时间段内不能存在相关表结构变更的 DDL 记录。若存在,TiDB 会拒绝该 DDL 操作。

    • FLASHBACK CLUSTER TO TIMESTAMP 命令不能取消,一旦开始执行 TiDB 会一直重试,直到成功。

    恢复新插入的数据:

    1. mysql> CREATE TABLE t(a INT);
    2. mysql> SELECT * FROM t;
    3. Empty set (0.01 sec)
    4. mysql> SELECT now();
    5. +---------------------+
    6. | now() |
    7. +---------------------+
    8. | 2022-09-28 17:24:16 |
    9. +---------------------+
    10. 1 row in set (0.02 sec)
    11. mysql> INSERT INTO t VALUES (1);
    12. +------+
    13. | a |
    14. +------+
    15. | 1 |
    16. +------+
    17. 1 row in set (0.01 sec)
    18. mysql> FLASHBACK CLUSTER TO TIMESTAMP '2022-09-28 17:24:16';
    19. Query OK, 0 rows affected (0.20 sec)
    20. mysql> SELECT * FROM t;

    如果从 FLASHBACK 指定的时间点到开始执行的时间段内有改变表结构的 DDL 记录,那么将执行失败:

    该语句是 TiDB 对 MySQL 语法的扩展。