- 文档首页
云数据库 MySQL 版
内核功能
功能
Flashback Query
Flashback Query
本文介绍云数据库 MySQL 版闪回查询功能的相关信息。
背景信息
在数据库运维过程中可能会发生误操作的情况,这些误操作可能会给业务带来严重的影响,因误操作导致业务受到影响时,常见的恢复手段有回档、克隆等操作,但对于少量的数据变更以及紧急故障修复而言,容易出错且耗时较长,在数据量较大时恢复时间不可控。
云数据库 MySQL 版在 InnoDB 引擎上设计和实现了闪回查询功能,仅通过简单的 SQL 语句即可查询误操作前的历史数据。
参数说明
闪回查询功能的使用依赖于参数 loose_rds_flashback_query 和 loose_rds_flashback_query_window 的配置,这两个参数的信息如下:
状态说明
云数据库 MySQL 版提供了以下状态来显示当前闪回查询的状态:
支持版本
- MySQL 8.0 版本,且内核小版本为 MySQL 8.0.32_20250215 及以上。
- MySQL 5.7 版本,且内核小版本为 MySQL 5.7.32_20250415 及以上。
- MySQL 8.4 版本,且内核小版本为 MySQL 8.4.7_20260415 及以上。
注意事项
- 适用对象:仅支持 InnoDB 引擎的表,不支持视图(View)、其他存储引擎以及没有实际列对应的函数(如 1490059)。
- 必须指定具体的 TIMESTAMP 字符串,不支持使用函数来代替时间戳。
- 若同一条语句对同一张表指定了多个不同的时间戳,系统仅采纳第一个时间戳,其余将被忽略。
- 特殊语法支持:CREATE TABLE ... SELECT 以及 INSERT INTO ... SELECT 语句仅在 READ COMMITTED 隔离级别下支持。
- 推荐场景:推荐在单表查询场景中使用,并尽量使用主键进行查询。
- 多表闪回查询(如 JOIN、子查询)会导致查询性能显著下降,不建议在复杂查询场景下使用。
- 资源开销:开启闪回查询(loose_rds_flashback_query = ON)会延迟 Undo 日志的清理。在配置的时间窗口 (loose_rds_flashback_query_window) 内,Undo 表空间会增长,且数据库的查询及写入性能会有所下降。建议根据业务流量合理配置时间窗口,不建议设置过大。
- 时间精度:闪回查询的精度为秒级,不保证毫秒级完全准确。如果一秒内有多次数据改动,可能会查询到其中任意一个状态。
- DDL 操作影响:执行 DDL 操作(如 TRUNCATE TABLE 等会导致表重建的操作)后,之前的数据无法进行闪回查询,或者查询结果可能不符合预期。
- 主从节点差异:由于主节点和只读节点之间存在时间差,指定相同时间查询可能得到不同结果。为解决此问题,代理通常会将闪回查询的 SQL 强制分发给主节点执行。
- 功能开关影响:关闭 loose_rds_flashback_query 参数后再重新开启,将无法查询到关闭期间及开启之前的历史信息。
- 功能未开启:如果在未开启参数时执行查询,会报错 ERROR 1030 (HY000): Got error 216 - 'Option loose_rds_flashback_query is OFF' from storage engine。
- 超出时间范围:如果查询的时间戳超出了保留的历史信息范围,会报错 ERROR 1030 (HY000): Got error 215 - 'Read view not found; Timestamp may be too old' from storage engine。
- 隔离级别不支持:在不支持的隔离级别下执行 FOR UPDATE 或特定 INSERT/CREATE 语句,会报错 ERROR 1030 (HY000): Got error 217 - 'Current transaction isolation level does not support this kind of flashback queries.' from storage engine。
- 查看支持范围:可以通过执行 SHOW STATUS LIKE '%flashback%',查看状态变量 Innodb_flashback_query_start_time 和 Innodb_flashback_query_end_time 来确认当前支持闪回查询的时间范围(时区与 MySQL system_time_zone 一致)。
前提条件
- 已将参数 loose_rds_flashback_query 的运行值设置为 ON。关于修改参数的详细信息,请参见修改参数。
- 按需设置参数 loose_rds_flashback_query_window 的运行值。
使用说明
闪回查询提供了全新的 AS OF 语法,完成前提条件后,即可使用 AS OF 语法查询指定时间的数据。 AS OF 语法如下: 语法中涉及的参数说明如下:
使用示例
最近更新时间:2026.08.13 10:28:31