mysql数据库全局只读和会话只读问题解析

时间:2021-10-04 02:03:41

对于系统的发布是经常有的事情,有些时候需要隔绝外界对数据库的更改但是还要求可以读取数据,对于mss sql 这个就是很简单,直接属性—>选项—>只读 ,但是对于mysql这是不同的,今天仔细研究了一下mysql对于单独和实例只读的设置

 
这里不介绍mysql通过对于账户权限控制来达到数据库只读的方式,这里主要说明数据库参数的控制方式
 
1.read_only参数
解析:这是mysql的全局参数,默认设置为0
想要整个库只读只需要设置这个参数为为1 即  set global read_only=1;
注意:这个参数是super权限的用户和从服务器从主机复制的线程不会被影响,所以主从中建议在从服务器设置为参数1
              对于mysql权限分配时注意收回super权限,这样才可以全局保证数据库为只读
               read_only 参数并不适用临时表,也不适用于系统服务插入日志表,总体来讲这个参数只是限制不让没有super权限的账户修改表的结构和内容,并且具有super权限的可以对数据库更新等操作,但是有个缺点就是这个参数是全局变量,而生产中多数是一个实例多个数据库。
 
延伸:tx_read_only参数,这个参数是一个全局和会话变量,并且我测试过这个参数会导致所有的账户都只有只读权限,并且存储引擎是myisam的时候,这个变量也是起作用的。