在MySQL上实现闪回查询

author:sufei

版本:MySQL 8.0.18

说明:本文仅仅是测试MySQL闪回查询的效果


一、新引入两个系统变量

  • allow_flash_period

全局只读变量,单位为ms,用于表示是否开启了闪回查询功能(0表示未开启),以及控制purge线程清理undo表空间,确保从当前时刻到该变量设置的时间段内的undo表空间不被清理。即如果allow_flash_period设置为3600000,则系统执行闪回查询,只能查询1小时范围内,超过该范围的unlog 可能被清理了。

  • flashtime

会话变量,字符串类型,用于表示该回话是否设置了闪回查询以及闪回查询的时刻。

二、实验情况

整个操作情况如下:

1、查看原始数据

2、2021-02-06 16:26:30后,执行插入

3、2021-02-06 16:27:07后,执行更新操作

4、2021-02-06 16:28:07后,执行删除操作

5、闪回查询验证

mysql> select * from test_flash;  ## 现在数据如下
+------+--------+------+
| id   | name   | age  |
+------+--------+------+
|    1 | dog    |   12 |
|    2 | lion   |   15 |
|    3 | sheep  |    3 |
|    4 | rabbit |    2 |
+------+--------+------+
4 rows in set (0.02 sec)

mysql> select now();  
+---------------------+
| now()               |
+---------------------+
| 2021-02-06 16:26:30 |
+---------------------+
1 row in set (0.00 sec)

mysql> insert into test_flash values(5,'pig',3);
Query OK, 1 row affected (0.01 sec)

mysql> select now();
+---------------------+
| now()               |
+---------------------+
| 2021-02-06 16:27:07 |
+---------------------+
1 row in set (0.00 sec)

mysql> update test_flash set name='duck';
Query OK, 5 rows affected (0.01 sec)
Rows matched: 5  Changed: 5  Warnings: 0

mysql> select now();
+---------------------+
| now()               |
+---------------------+
| 2021-02-06 16:28:07 |
+---------------------+
1 row in set (0.00 sec)

mysql> delete from test_flash where id = 4;
Query OK, 1 row affected (0.01 sec)

mysql> select * from test_flash; ## 最终数据
+------+------+------+
| id   | name | age  |
+------+------+------+
|    1 | duck |   12 |
|    2 | duck |   15 |
|    3 | duck |    3 |
|    5 | duck |    3 |
+------+------+------+
4 rows in set (0.00 sec)

下面则是闪回查询执行效果

闪回查询结果

闪回模式下dml操作验证

mysql> set flashtime = '2021-02-06 16:28:07';
Query OK, 0 rows affected (0.00 sec)

mysql> insert into test_flash values(6,'snake',5);
ERROR 3655 (HY000): DML operation is disallowed on when flashtime is not NULL . 

相应dml操作报错,表明此时会话在闪回模式下,无法进行dml操作。

你可能感兴趣的:(在MySQL上实现闪回查询)