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
相关推荐
程序员佳佳19 分钟前
2025年大模型终极横评:GPT-5.2、Banana Pro与DeepSeek V3.2实战硬核比拼(附统一接入方案)
服务器·数据库·人工智能·python·gpt·api
qq_124987075330 分钟前
重庆三峡学院图书资料管理系统设计与实现(源码+论文+部署+安装)
java·spring boot·后端·mysql·spring·毕业设计
大学生资源网34 分钟前
java毕业设计之“知语”花卉销售网站的设计与实现源码(源代码+文档)
java·mysql·毕业设计·源码·springboot
roo_142 分钟前
github 获取构造图数据库的LNB数据集和使用说明
数据库
罗汉松驻扎的工作基地1 小时前
sql server 2014 下载和安装
数据库
<花开花落>3 小时前
Cursor 的 MCP 应用:mysql-mcp-server
mysql·cursor·mcp
l1t3 小时前
用docker安装oracle 19c
运维·数据库·docker·oracle·容器
Java&Develop3 小时前
DataEase图表页面传参至数据库查询方法 和页面筛选方法 sql传参
数据库·sql
Boilermaker19923 小时前
[MySQL] 设计范式与 E-R 图绘制
mysql·oracle·设计规范
+VX:Fegn08953 小时前
计算机毕业设计|基于springboot + vue作业管理系统(源码+数据库+文档)
数据库·vue.js·spring boot·后端·课程设计