mysql中的read_only和super_read_only

在引入super_read_only之前,mysql提供了一个选项read_only。开启read_only之后,会阻止没有super权限的用户执行数据库更新操作。read_only主要用于复制节点。

super_read_only不仅会阻止普通用户,也会阻止具有super权限的用户对数据库写操作。



read_only和super_read_only是有关联的。默认二者都是关闭的:

·如果开启了super_read_only,即使用户有super权限,也会被禁止更新操作

·设置super_read_only=on,也就隐式地设置了read_only=on

·设置read_only=off,也就隐式地设置了super_read_only=off



即使设置read_only=on,mysql还支持以下的操作行为:

·如果是复制节点,replica线程执行update操作

·使用analyze table、optimize table语句。read only是为了避免对表结构或者内容进行修改。而这些命令不会。

·对temporary表进行操作

·向日志表(mysql.general_log、mysql.slow_log)插入记录

·mysql 5.7.16开始,更新performance schema表,比如update、truncate表操作

平时关注的大佬网站上,几天前突然慎重的介绍了一下super_read_only这个参数,搞的我以为有了什么重大改变或bug呢!贴一下以前的笔记吧。