前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >read_only和super_read_only参数的区别

read_only和super_read_only参数的区别

作者头像
AsiaYe
发布2020-09-10 00:18:20
3.8K0
发布2020-09-10 00:18:20
举报
文章被收录于专栏:DBA随笔DBA随笔

read_only和super_read_only参数的区别?

在MySQL中,从库经常会被设置成为read_only属性,来防止数据的写入,在开启gtid的情况下,如果我们看到从库上面有多个GTID值,然后其中一个GTID的uuid和从库的uuid一致,那就可以判断,这个从库曾经出现过写入,可能需要校验从库和主库的数据一致性。

类似read_only参数,还有一个super_read_only的参数,这两个参数之间有些细微的关系,今天在这里罗列一下:

1、read_only参数和super_read_only参数默认都是关闭的,read_only参数设置为on的情况下,会组织客户端的更新,但是如果一个账号拥有super权限,那么还是可以进行更新的。而super_read_only会阻止所有的客户端更新,即使客户端拥有super权限也不可以。

2、设置super_read_only参数为on会默认联动的设置read_only为on

3、设置read_only参数为off,会默认联动设置super_read_only为off

代码语言:javascript
复制
 1mysql> show variables like '%read_only%';
 2+-----------------------+-------+
 3| Variable_name         | Value |
 4+-----------------------+-------+
 5| innodb_read_only      | OFF   |
 6| read_only             | OFF   |
 7| super_read_only       | OFF   |
 8| transaction_read_only | OFF   |
 9+-----------------------+-------+
104 rows in set (0.00 sec)
11
12mysql> set global super_read_only=on;
13Query OK, 0 rows affected (0.00 sec)
14
15mysql> show variables like '%read_only%';
16+-----------------------+-------+
17| Variable_name         | Value |
18+-----------------------+-------+
19| innodb_read_only      | OFF   |
20| read_only             | ON    |
21| super_read_only       | ON    |
22| transaction_read_only | OFF   |
23+-----------------------+-------+
244 rows in set (0.01 sec)
25
26mysql> set global read_only=off;
27Query OK, 0 rows affected (0.00 sec)
28
29mysql> show variables like '%read_only%';
30+-----------------------+-------+
31| Variable_name         | Value |
32+-----------------------+-------+
33| innodb_read_only      | OFF   |
34| read_only             | OFF   |
35| super_read_only       | OFF   |
36| transaction_read_only | OFF   |
37+-----------------------+-------+
384 rows in set (0.00 sec)

4、即使你设置了read_only为on的状态,下面的操作也是允许的:

a、从库复制中的更新,也就是说在主从复制场景下,从库设置read_only是有效的,复制不会因此中断。

b、analyze table和optimize table语句可以正常执行,因为他们不会给表中插入语句

c、对临时表的操作是支持的。

d、插入系统日志表的操作是允许的,例如mysql.general_log和mysql.slow_log

5、如果我们设置super_read_only为on,不仅拥有super权限的账号不能进行更新,其他一些动作,例如create function或者install plugin的动作也不能执行,因为这些动作也涉及到mysql系统数据库中表的修改。

代码语言:javascript
复制
 1mysql> show variables like '%read_only%';
 2+-----------------------+-------+
 3| Variable_name         | Value |
 4+-----------------------+-------+
 5| innodb_read_only      | OFF   |
 6| read_only             | ON    |
 7| super_read_only       | ON    |
 8| transaction_read_only | OFF   |
 9+-----------------------+-------+
104 rows in set (0.00 sec)
11
12mysql> 
13mysql> INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';
14ERROR 1290 (HY000): The MySQL server is running with the --super-read-only option so it cannot execute this statement

Innodb_Read_Only参数(有点类似super_read_only)

在MySQL中,除了super_read_only和read_only之外,还有一个参数innodb_read_only,这个参数设置为on之后,在MySQL5.7版本中,仅仅会阻止innodb存储引擎的表创建和删除,在MySQL8.0中,会阻止所有存储引擎执行create和drop表的操作,除此之外,启用了innodb_read_only参数,analyze table可能会失败,因为该操作本质上需要更新innodb数据字典中的统计表。除此之外:

代码语言:javascript
复制
alter table tbl_name engine=engine_name

这种语句也会失败,因为它更新了存储在数据字典中的存储引擎名称。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-09-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DBA随笔 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档