美文网首页
在MySQL上实现闪回查询

在MySQL上实现闪回查询

作者: 真之棒2016 | 来源:发表于2021-02-26 15:04 被阅读0次

    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上实现闪回查询

          本文链接:https://www.haomeiwen.com/subject/vmwmfltx.html