MySQL 的 super_read_only 和 read_only 参数

MySQL 的 super_read_only 和 read_only 参数

一、参数基本概念

1. read_only 参数

  • 作用:控制普通用户是否只能读取数据
  • 影响范围:所有非SUPER权限的用户
  • 默认值:OFF(可读写)

2. super_read_only 参数

  • 作用:控制包括SUPER权限用户在内的所有用户是否只能读取数据
  • 影响范围:所有用户(包括具有SUPER权限的用户)
  • 默认值:OFF(可读写)

二、参数关系与优先级

特性 read_only super_read_only
影响普通用户 ✔️ ✔️
影响SUPER权限用户 ✖️ ✔️
优先级
依赖关系 - 依赖read_only

重要规则

  1. super_read_only=ON 时,会自动将 read_only 设置为 ON
  2. read_only=OFF 时,super_read_only 必须为 OFF(不能单独设置 super_read_only=ON 而 read_only=OFF)

三、参数设置方法

1. 动态设置(无需重启)

sql 复制代码
-- 设置只读模式(普通用户)
SET GLOBAL read_only = ON;

-- 设置超级只读模式
SET GLOBAL super_read_only = ON;

-- 取消只读模式(必须先取消super_read_only)
SET GLOBAL super_read_only = OFF;
SET GLOBAL read_only = OFF;

2. 配置文件设置(需重启)

ini 复制代码
[mysqld]
read_only=1
super_read_only=1

四、参数使用场景

1. read_only 适用场景

  • 主从复制中,从库设置为只读
  • 报表库、数据分析库等只需读取的环境
  • 系统维护期间防止数据修改

2. super_read_only 适用场景

  • 高安全性要求的只读环境
  • 防止管理员误操作修改数据
  • 关键备份服务器保护
  • 云数据库的灾备实例

五、参数行为验证

1. 普通用户测试

sql 复制代码
-- 当read_only=ON时
mysql> INSERT INTO test.t1 VALUES(1); 
ERROR 1290 (HY000): The MySQL server is running with the --read-only option so it cannot execute this statement

-- 当read_only=OFF时(正常执行)

2. SUPER用户测试

sql 复制代码
-- 当read_only=ON但super_read_only=OFF时
mysql> INSERT INTO test.t1 VALUES(1); 
Query OK, 1 row affected (0.00 sec)  -- SUPER用户仍可写入

-- 当super_read_only=ON时
mysql> INSERT INTO test.t1 VALUES(1);
ERROR 1290 (HY000): The MySQL server is running with the --super-read-only option so it cannot execute this statement

六、注意事项

  1. 复制环境 :从库设置 read_only=ON 不会阻止复制线程写入
  2. 临时表:只读模式仍允许创建临时表
  3. 系统表:某些系统表的更新不受只读模式限制
  4. 权限变更:只读模式不影响GRANT/REVOKE操作
  5. 启动顺序super_read_only 在启动时最后应用

七、相关系统变量

sql 复制代码
SHOW VARIABLES LIKE '%read_only%';
/*
+------------------+-------+
| Variable_name    | Value |
+------------------+-------+
| read_only        | ON    |
| super_read_only  | ON    |
+------------------+-------+
*/

八、最佳实践建议

  1. 主从架构 :建议从库设置 read_only=ON
  2. 关键备份 :建议设置 super_read_only=ON
  3. 变更流程 :先设置 read_only=ON,再设置 super_read_only=ON
  4. 取消流程 :先取消 super_read_only,再取消 read_only
  5. 监控报警:监控只读状态异常变化

详细内容请查看官方文档:

dart 复制代码
https://dev.mysql.com/doc/refman/8.4/en/server-system-variables.html#sysvar_read_only
https://dev.mysql.com/doc/refman/8.4/en/server-system-variables.html#sysvar_super_read_only
相关推荐
想摆烂的不会研究的研究生25 分钟前
每日八股——Redis(1)
数据库·经验分享·redis·后端·缓存
码熔burning36 分钟前
MySQL 8.0 新特性爆笑盘点:从青铜到王者的骚操作都在这儿了!(万字详解,建议收藏)
数据库·mysql
猫头虎43 分钟前
2025最新OpenEuler系统安装MySQL的详细教程
linux·服务器·数据库·sql·mysql·macos·openeuler
哈库纳玛塔塔1 小时前
放弃 MyBatis,拥抱新一代 Java 数据访问库
java·开发语言·数据库·mybatis·orm·dbvisitor
@LetsTGBot搜索引擎机器人3 小时前
2025 Telegram 最新免费社工库机器人(LetsTG可[特殊字符])搭建指南(含 Python 脚本)
数据库·搜索引擎·机器人·开源·全文检索·facebook·twitter
计算机毕设VX:Fegn08953 小时前
计算机毕业设计|基于springboot + vue动物园管理系统(源码+数据库+文档)
数据库·vue.js·spring boot·后端·课程设计
冉冰学姐3 小时前
SSM校园排球联赛管理系统y513u(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面
数据库·ssm 框架应用·开题报告、
Tony Bai4 小时前
【分布式系统】03 复制(上):“权威中心”的秩序 —— 主从架构、一致性与权衡
大数据·数据库·分布式·架构
wb043072015 小时前
SQL工坊不只是一个ORM框架
数据库·sql
至善迎风5 小时前
Redis完全指南:从诞生到实战
数据库·redis·缓存