tencent cloud

TDSQL-C MySQL 版

动态与公告
产品动态
产品公告
新手指引
产品简介
产品概述
产品优势
应用场景
产品架构
产品规格
实例类型
产品功能列表
数据库版本
地域和可用区
常用概念
使用限制
使用规范建议
自研内核
内核概述
内核版本更新动态
内核优化版本
功能类特性
性能类特性
安全类特性
稳定性特性
分析引擎特性
内核问题检查与修复
购买指南
计费概述
产品价格
创建集群
变配说明
续费说明
欠费说明
退费说明
按量转包年包月
按量转 Serverless
增值服务计费说明
查看费用账单
快速入门
数据库审计
简介
查看审计实例列表
开通审计服务
查看审计日志
日志投递
配置事后告警
修改审计规则
修改审计服务
关闭审计服务
审计规则模板
查看审计任务
授权子用户使用数据库审计
Serverless 服务
Serverless 简介
创建和管理 Serverless 版集群
弹性管理工具
Serverless 资源包
多可用区部署
配置变更
常见问题
Serverless 成本预估器
操作指南
操作总览
控制台切换集群页面视图
数据库连接
实例管理
配置变更
实例形态管理
集群管理
只读实例管理
数据库代理
账号管理
数据库管理
数据库管理工具(DMC)
参数配置
多可用区部署
全球数据库
备份与恢复
操作日志
迁移数据
并行查询
列存索引 CSI
分析引擎
数据库安全和加密
监控与告警
SQL 基本操作
使用 SCF 连接 TDSQL-C MySQL 版
标签
实践教程
TDSQL-C MySQL 版数据库审计等保实践
通过 DTS 升级数据库版本 MySQL5.7至8.0
TDSQL-C MySQL 版使用规范
新版本控制台
数据库代理多连接地址实现多 RO 组
数据库代理的优势
如何选择存储空间计费模式
通过 DTS 构建异地灾备
为集群创建 VPC
如何进行数据恢复
如何解决 CPU 使用率高的问题
如何授权子用户查看监控
白皮书
安全白皮书
性能白皮书
故障处理
连接相关
性能相关
API 文档
History
Introduction
API Category
Making API Requests
Instance APIs
Multi-Availability Zone APIs
Other APIs
Audit APIs
Database Proxy APIs
Backup and Recovery APIs
Parameter Management APIs
Billing APIs
serverless APIs
Resource Package APIs
Account APIs
Performance Analysis APIs
Data Types
Error Codes
常见问题
基础概念
购买与计费
兼容与格式
连接与网络
功能特性
控制台操作
数据库表
性能与日志
数据库审计
TDSQL-C MySQL 版和云数据库 MySQL 有什么区别
相关协议
服务等级协议
服务条款
TDSQL-C 政策
隐私政策
数据处理和安全协议
通用参考
标准与认证
词汇表
联系我们

闪回查询

PDF
聚焦模式
字号
最后更新时间: 2024-12-26 18:28:15

功能介绍

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

支持版本

内核版本 TDSQL-C MySQL 版 5.7 2.1.13.001及以上。
内核版本 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';
闪回查询还支持了持久化,支持将闪回查询内存中的 readview 信息定期持久化到物理表中,重启后仍然可以执行重启前的闪回查询。此能力需要开启闪回查询,并打开闪回查询持久化开关(打开持久化开关:设置 innodb_backquery_persistent = ON),否则无效。
说明:
要使用闪回查询持久化能力,需满足内核版本在 TDSQL-C MySQL 版 8.0 3.1.15 及以上。

参数说明

下列表中列举闪回查询功能可配置的参数说明。
参数名
参数范围
类型
默认值
取值范围
是否需重启
说明
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,直到历史链表长度低于设定值。
innodb_backquery_persistent
非全局参数
Boolean
OFF
ON/OFF
闪回查询持久化的开关。

帮助和支持

本页内容是否解决了您的问题?

填写满意度调查问卷,共创更好文档体验。

文档反馈