前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >[MYSQL] read_only, super_read_only,transaction_read_only, innodb_read_only

[MYSQL] read_only, super_read_only,transaction_read_only, innodb_read_only

原创
作者头像
大大刺猬
发布2024-06-07 13:45:34
830
发布2024-06-07 13:45:34
举报
文章被收录于专栏:大大刺猬大大刺猬

导读

我们通常会给从库设置只读, 一般是设置read_only=ON即可, 那么这个只读限定了哪些只读呢? super_read_only,transaction_read_only/tx_read_only, innodb_read_only 又是限定啥的呢?

super_read_only

  1. 当设置super_read_only=ON的时候, 会自动设置read_only=ON
  1. 比read_only多限制了有super权限的账号. 真正的只读 https://oss-emcsprod-public.modb.pro/image/editor/20240607-2a1e18a4-b387-4521-8d6e-0142a5a4c8e6.png
  2. 不允许创建函数,存储过程,触发器,EVENT等.
  1. 不允许安装插件
  1. EVENT_SCHEDULER不会执行
  1. 手动收集统计信息也不行的

数据更新我就不测了, 肯定不行的

主打一个啥也干不了, 跟外包似的. 但是可以查询.

read_only

  1. read_only是除了拥有 CONNECTION_ADMIN (以前叫super)的账号 之外, 均不能更新数据
  1. 设置 read_only=off 会自动设置super_read_only=off
  1. 也创建函数,存储过程, 触发器,event等.(除super权限账号外)
  2. 非super权限账号创建的event也不能执行.
  3. 未提交的事务, 只能回滚

基本上就是除了有super权限的账号外, 其它账号只能查询了.

transaction_read_only/tx_read_only

  1. 5.7.20 的时候 tx_read_only改名为transaction_read_only了. 其实是同义词. 8.0 就只剩transaction_read_only了.
  2. 会话级别参数, 也就是客户端可以自己设置自己的事务是否只读. 且对已连接的客户端不生效.

innodb_read_only

  1. 那仨变量都能在线修改, 但这个B是只读的, 修改的话,要重启. (当然也是全局的咯)
  2. 8.0 以前只对innodb设置为只读, 8.0之后对所有存储引擎都是只读.
  3. 系统表是innodb的话, 也不能做analyze之类的了.

汇总

  1. read_only/super_read_only 更像是对账号设置只读, 要连接数据库才能做的更新操作(含存储过程/函数,触发器,event)都不允许了. 已连接会话未提交的事务只能回滚. 是全局变量, 可动态修改.
  2. transaction_read_only/tx_read_only 是会话级别的参数, 会话可以自己修改自己的会话值. 所以对已连接的会话不生效
  3. innodb_read_only 更像是对文件做了只读.
  4. 设置super_read_only = on 会自动设置 read_only=on
  5. 设置read_only=off 会自动设置 super_read_only=off

一般从库还是设置read_only即可. 稳一点的话, 设置super_read_only.

代码语言:sql
复制
-- 设置只读
set global super_read_only=on;

-- 关闭只读
set global read_only=off;

super_read_only看起来只是在read_only的基础上多约束了个含super权限的账号, 所以变量值才有联动.

其它: 8.0.22及其之后还可以设置某个库只读 alter database db1 read only 1;

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

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

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 导读
  • super_read_only
  • read_only
  • transaction_read_only/tx_read_only
  • innodb_read_only
  • 汇总
相关产品与服务
云数据库 MySQL
腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档