tencent cloud

文档反馈

闪回查询

最后更新时间:2024-04-25 11:06:12

    功能介绍

    在数据库运维过程中可能会发生误操作的情况,这些误操作可能会给业务带来严重的影响,因误操作导致业务受到影响时,常见的恢复手段有回档、克隆等操作,但对于少量的数据变更以及紧急故障修复而言,容易出错且耗时较长,在数据量较大时恢复时间不可控。 TXSQL 团队在 Innodb 引擎上设计和实现了闪回查询功能,仅需通过简单的 SQL 语句即可查询误操作前的历史数据,通过特定的 SQL 语法查询指定时间点的数据,节省大量的数据查询和恢复时间,使得误操作后的数据能够快速恢复,从而保障业务快速恢复运行。

    支持版本

    内核版本 TDSQL-C MySQL 版8.0 3.1.10及以上。

    适用场景

    闪回查询功能用于在数据库运维过程中,误操作后进行快速的查询历史数据。 在使用该功能时,需要注意以下几点:
    仅支持 Innodb 物理表,不支持 view 及其它引擎,不支持 last_insert_id() 等没有实际列对应的函数。
    仅支持秒级的闪回查询,不保证百分之百准确,如果一秒之内有多个改动,可能会查询到其中任何一个。
    闪回查询仅支持主键(或者 GEN_CLUST_INDEX)。
    不支持在 prepared statement 和 stored procedure 中使用。
    不支持 DDL,如果对表进行 DDL(如 truncate table,这种建议通过回收站进行恢复),闪回查询得到的结果可能不符合预期。
    同一个语句中,同一张表如果指定了多个闪回查询时间,会选择离当前查询时间最远的时间。
    由于主从实例存在时间差,指定相同时间进行闪回查询,主从实例获得的结果可能不一样。
    开启闪回查询后会延迟 undo 日志清理以及增加内存占用,不建议 Innodb_backquery_window 设置过大(建议设置在900至1800之间),尤其是业务访问繁忙的实例。
    如果数据库实例重启或者 crash,将不能查询到重启或 crash 之前的历史信息。指定的时间需要在支持的范围之内(支持范围可通过状态变量 Innodb_backquery_up_time 和 Innodb_backquery_low_time 查看,执行 show status like '%backquery%')。

    使用说明

    闪回查询提供了全新的 AS OF 语法,在参数设置中将 Innodb_backquery_enable 参数设置为 ON,打开闪回查询功能,通过特定语法查询指定时间的数据。语法如下:
    SELECT ... FROM <表名>
    AS OF TIMESTAMP <时间>;
    查询指定时间参考示例
    MySQL [test]> create table t1(id int,c1 int) engine=innodb;
    Query OK, 0 rows affected (0.06 sec)
    
    MySQL [test]> insert into t1 values(1,1),(2,2),(3,3),(4,4);
    Query OK, 4 rows affected (0.01 sec)
    Records: 4 Duplicates: 0 Warnings: 0
    
    MySQL [test]> select now();
    +---------------------+
    | now() |
    +---------------------+
    | 2023-08-17 15:50:01 |
    +---------------------+
    1 row in set (0.00 sec)
    
    MySQL [test]> delete from t1 where id=4;
    Query OK, 1 row affected (0.00 sec)
    
    MySQL [test]> select * from t1;
    +------+------+
    | id | c1 |
    +------+------+
    | 1 | 1 |
    | 2 | 2 |
    | 3 | 3 |
    +------+------+
    3 rows in set (0.00 sec)
    
    MySQL [test]> select * from t1 as of timestamp '2023-08-17 15:50:01';
    +------+------+
    | id | c1 |
    +------+------+
    | 1 | 1 |
    | 2 | 2 |
    | 3 | 3 |
    | 4 | 4 |
    +------+------+
    4 rows in set (0.00 sec)
    通过历史数据创建表示例
    create table t3 select * from t1 as of timestamp '2023-08-17 15:50:01';
    插入历史数据至表中示例
    insert into t4 select * from t1 as of timestamp '2023-08-17 15:50:01';

    参数说明

    下列表中列举闪回查询功能可配置的参数说明。
    参数名
    参数范围
    类型
    默认值
    取值范围
    是否需重启
    说明
    innodb_backquery_enable
    全局参数
    Boolean
    OFF
    ON/OFF
    闪回查询功能的开关
    innodb_backquery_window
    全局参数
    Integer
    900
    1 - 86400
    支持闪回查询的时间范围,单位:秒,此参数的值越大,闪回查询支持的历史数据查询时间越长,同时 undo 表空间占用的存储空间也会上升
    innodb_backquery_history_limit
    全局参数
    Integer
    8000000
    1 - 9223372036854476000
    undo 的历史链表长度限制,超过设定值会忽略 Innodb_backquery_window 触发 purge,直到历史链表长度低于设定值
    
    联系我们

    联系我们,为您的业务提供专属服务。

    技术支持

    如果你想寻求进一步的帮助,通过工单与我们进行联络。我们提供7x24的工单服务。

    7x24 电话支持