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操作。
网友评论