首页 > 数据库技术 > 详细

mysql_参数_readonly

时间:2021-05-31 22:00:32      阅读:22      评论:0      收藏:0      [点我收藏+]

前情提要:

数据库版本:5.7.32-35-log。就本人所知,执行set global read_only = 0 后,数据库应该是只读状态。然而在测试执行后的数据库状态后发现,依旧可以建账号,建库,建表,删账号,删库,删表,插入数据,删除数据。

检查read_only:

技术分享图片

解题:

read_only查阅官方文档如下:

技术分享图片

 

 

很显然还涉及账号本身的权限和另一个参数:super_read_only

现在查看账号当前权限和另一个参数:

 

 

 技术分享图片

 

 

 一个拥有SUPER权限的账号,在read_only = on & super_read_only = off的情况下,依旧能对数据库进行一系列的DDL和DML操作。

set global super_read_only = on; :

技术分享图片

 

结论:

        一个拥有SUPER权限的账号,在read_only = on & super_read_only = off的情况下,依旧能对数据库进行一系列的DDL和DML操作,但在read_only = on & super_read_only = on时,则不能。

延展

        设置read_only = on后,不会影响执行read_only = on正在执行的事务或已持有的锁,其它空闲表会被执行read_only。执行read_only = on正在执行的事务或已持有的锁,完成或释放后会被执行read_only。

官方文档原文:The attempt blocks while other clients have any ongoing statement, active LOCK TABLES WRITE, or ongoing commit, until the locks are released and the statements and transactions end. While the attempt to enable read_only is pending, requests by other clients for table locks or to begin transactions also block until read_only has been set.

   验证的操作截图如下(图片顺序即步骤顺序):

技术分享图片

  开启一个删除表A数据的事务:

技术分享图片

 

  此时for update查询表A报错锁等待:

技术分享图片

  打开read_only:

技术分享图片

 

   再for update查询表B,和表A,都是报错当前实例为只读:

技术分享图片

 

   之前删除表A数据的事务未提交也未回滚;

  在回滚事务前先查询该条删除的数据,回滚,再查询,数据未被删除;因此,事务开始后再执行的read_only=on并未影响该事务

技术分享图片

 

 

转载请知会,并标明出处。

 

mysql_参数_readonly

原文:https://www.cnblogs.com/HH0260/p/14832618.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!