表数据闪回查询(1) 注意事项 建议只对确实需要审计或故障排查的表开启系统版本化,先使用测试环境验证后再进行实际操作,避免查询失败或查询结果不符合预期。 表数据闪回查询功能并不会备份表数据,因此,不能替代定期的数据备份与恢复,历史数据随时可能因被回收而无法查询。超出范围时,闪回查询可能出现少行、报错、查询结果与预期不符等,请勿当作备份恢复手段的唯一依赖。更多备份恢复信息,请参见备份与恢复。 表超过保留策略、服务器被回收、表中的行被删除且相关历史被回收后,均无法通过本功能查询到数据。 如果存在长时间未提交的事务,可能影响服务器回收历史数据的进度,进而影响您能查到多久以前的数据。 当您在维护窗口执行ADD SYSTEM VERSIONING / DROP SYSTEM VERSIONING操作时,可能短暂影响目标表的并发写入,建议在业务低峰时操作。 操作步骤 表数据闪回语法如下: plaintext SELECT FROM 表名 FOR SYSTEMTIME AS OF '时间点' WHERE id 1; 本操作以orders表在固定时间、相对当前时间和使用变量方式闪回查询数据为例,为您介绍具体操作步骤。请您以实际情况为准,进行相关操作。 1. 为目标表开启系统版本化配置。 注意 如果需要查看多张表,则您需要单独为每一张目标表进行开启操作。 plaintext ALTER TABLE orders ADD SYSTEM VERSIONING; 2. (推荐)由管理员设置可查询的时间范围。 plaintext 示例:尽量只保留约最近 1 小时内的历史(单位:秒) SET GLOBAL innodbbackquerywindow 3600; 查看当前值: plaintext SHOW VARIABLES LIKE 'innodbbackquerywindow'; 3. 按时间点查询表数据(即表数据闪回查询)。 plaintext 固定时间 SELECT FROM orders FOR SYSTEMTIME AS OF '20251216 09:00:00' WHERE id 100; 相对当前时间 SELECT FROM orders FOR SYSTEMTIME AS OF DATESUB(NOW(), INTERVAL 30 MINUTE) WHERE id 100; 使用变量 SET @t '20251216 09:00:00'; SELECT FROM orders FOR SYSTEMTIME AS OF @t WHERE id 100; 4. (可选)关闭系统版本化配置。 注意 您可以在不再需要该功能时,执行关闭操作。您需要注意,关闭后,不再按系统版本化方式维护该表,是否还能查询到历史数据取决于服务器的数据回收机制。 plaintext ALTER TABLE orders DROP SYSTEM VERSIONING;
来自: