You need to enable JavaScript to run this app.
文档中心
云数据库 veDB MySQL 版

云数据库 veDB MySQL 版

复制全文
下载 pdf
数据恢复
闪回查询
复制全文
下载 pdf
闪回查询
通过闪回查询功能,能够快速查询过去某个时间点的数据信息,有助于进行数据恢复或故障排查。本文介绍如何使用闪回查询功能。​
前提条件​
  • 已创建兼容版本为 MySQL 8.0 的实例。操作步骤请参见创建实例。​
  • 已在实例参数管理中开启 innodb_flashback_query 参数,该参数默认关闭。操作步骤请参见修改参数。​
使用限制​
  • 版本限制:实例兼容版本为 MySQL 8.0,内核版本为 3.0.*.* 且大于等于 3.0.5.2,关于版本的详细介绍请参见版本号管理。​
  • 仅支持 innoDB 表,不支持 view 及其他引擎(如 HTAP 引擎)。​
  • 仅支持在只读语句中使用(在 read committed 隔离级别下可以支持 insert ... select... 语句)。​
  • 仅支持秒级的闪回查询,不保证时间上百分之百准确。如果一秒之内有多个改动,可能会查询到其中任何一个。​
  • 在执行 DDL 之后(会产生 rebuild table 的 DDL,如 truncate table),之前的数据闪回查询结果可能不符合预期。​
  • PITR 后的实例因为 undo log 丢失因此闪回查询功能失效(报错 DB_MISSING_HISTORY)。​
  • 开启闪回查询后会延迟 undo 日志清理并增加内存占用,因此不建议将 innodb_flashback_query_window 设置过大,建议设置在 900 至 1800 之间。​
  • 推荐在单表场景中使用闪回查询,不建议在复杂查询场景下(如 JOIN、子查询)使用闪回查询。​
参数说明​
通过以下参数控制闪回查询功能。​
​
参数​
默认值​
说明​
是否重启生效​
innodb_flashback_query​
OFF​
开启或关闭闪回查询功能。取值范围:​
  • ON:开启。​
  • OFF:关闭(默认)。​
否​
innodb_flashback_query_window​
900​
闪回查询支持的时间长度,单位为 s(秒),取值范围为 0~604800(7 天)。​
说明​
开启闪回查询后会延迟 undo 日志清理并增加内存占用,因此不建议将 innodb_flashback_query_window 设置过大,建议设置在 900 至 1800 之间。​
否​
​
语法说明​
支持通过以下语法使用闪回查询。​
​
SELECT <列名> FROM <表名> AS OF TIMESTAMP <时间> WHERE <条件>;​
​
示例​
  1. 在 2025-03-25 15:50:35 时间点创建一个表,并插入数据。​
  • ​
    CREATE TABLE t1 (​
    id INT AUTO_INCREMENT PRIMARY KEY,​
    name VARCHAR(255),​
    create_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP​
    );​
    ​
    INSERT INTO t1 (name) VALUES ('Bob'), ('Charlie'), ('David');​
    ​
  • ​
    select * FROM t1;​
    +----+---------+---------------------+​
    | id | name | create_time |​
    +----+---------+---------+-----------+​
    | 1 | Bob | 2025-03-25 15:50:35 |​
    | 2 | Charlie | 2025-03-25 15:50:35 |​
    | 3 | David | 2025-03-25 15:50:35 |​
    +----+---------+---------------------+​
    ​
  1. 在 2025-03-25 16:04:50 时刻,修改 Bob 为 Alice。​
  • ​
    UPDATE t1 SET name = 'Alice', create_time = NOW() WHERE name = 'Bob';​
    ​
    select * FROM t1 ;​
    +----+---------+---------------------+​
    | id | name | create_time |​
    +----+---------+---------+-----------+​
    | 1 | Alice | 2025-03-25 16:04:50 |​
    | 2 | Charlie | 2025-03-25 15:50:35 |​
    | 3 | David | 2025-03-25 15:50:35 |​
    +----+---------+---------------------+​
    ​
  1. 查看 2025-03-25 16:00:00 时间点表中的数据。​
  • ​
    SELECT * FROM t1 AS OF TIMESTAMP '2025-03-25 16:00:00' ;​
    ​
    select * FROM t1 ;​
    +----+---------+---------------------+​
    | id | name | create_time |​
    +----+---------+---------+-----------+​
    | 1 | Bob | 2025-03-25 15:50:35 |​
    | 2 | Charlie | 2025-03-25 15:50:35 |​
    | 3 | David | 2025-03-25 15:50:35 |​
    +----+---------+---------------------+​
    ​
  1. 在 2025-03-25 16:10:00 删除 name='David'的行数据。​
  • ​
    DELETE FROM t1 WHERE name = 'David';​
    ​
    select * FROM t1 ;​
    +----+---------+---------------------+​
    | id | name | create_time |​
    +----+---------+---------+-----------+​
    | 1 | Alice | 2025-03-25 16:04:50 |​
    | 2 | Charlie | 2025-03-25 15:50:35 |​
    +----+---------+---------------------+​
    ​
  1. 查看 2025-03-25 16:05:00 时间点表中 id=3 的数据。​
  • ​
    SELECT * FROM t1 AS OF TIMESTAMP '2025-03-25 16:05:00' where id = 3;​
    +----+---------+---------------------+​
    | id | name | create_time |​
    +----+---------+---------+-----------+​
    | 3 | David | 2025-03-25 15:50:35 |​
    +----+---------+---------------------+​
    ​
​
最近更新时间:2025.10.09 17:38:46
这个页面对您有帮助吗?
有用
有用
无用
无用