在数据库运维过程中可能会发生误操作的情况,这些误操作可能会给业务带来严重的影响,因误操作导致业务受到影响时,常见的恢复手段有回档、克隆等操作,但对于少量的数据变更以及紧急故障修复而言,容易出错且耗时较长,在数据量较大时恢复时间不可控。
TXSQL 团队在 Innodb 引擎上设计和实现了闪回查询功能,仅需通过简单的 SQL 语句即可查询误操作前的历史数据,通过特定的 SQL 语法查询指定时间点的数据,节省大量的数据查询和恢复时间,使得误操作后的数据能够快速恢复,从而保障业务快速恢复运行。
如何查看或升级内核小版本,请参见 升级内核小版本。
闪回查询功能用于在数据库运维过程中误操作后进行快速的查询历史数据。
在使用该功能时,需要注意以下几点:
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() |
+---------------------+
| 2022-02-17 16:01: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 '2022-02-17 16:01: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 '2022-02-17 16:01:01';
插入历史数据至表中示例
insert into t4 select * from t1 as of timestamp '2022-02-17 16:01: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,直到历史链表长度低于设定值。 |
本页内容是否解决了您的问题?