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
相关推荐
宠友信息37 分钟前
多端即时通讯源码技术实践,Redis路由、MySQL持久化与Socket接入
spring boot·websocket·mysql·uni-app
渣渣灰飞37 分钟前
MySQL 系统学习 第四阶段:MySQL 高级 第一节:索引(Index)
数据库·学习·mysql
山峰哥41 分钟前
数据库工程与SQL优化实战指南‌
数据库·sql·oracle·深度优先·宽度优先
Quincy_Freak1 小时前
Python 轻量化数据存储实践:国产化环境下SQLite高效管理方案
数据库·sqlite·数据库管理·大数据分析·sqlitego
SelectDB技术团队2 小时前
Agent 场景动态 JSON 性能拆解:Apache Doris 比 ClickHouse 快 7 倍、比 Elasticsearch 快 2 倍
数据库·clickhouse·elasticsearch·json·apache·日志分析·apache doris
greasyfork2 小时前
多种数据库管理混乱?Navicat Premium 17 for Mac 统一解决
数据库·mysql·macos·mac
Dream_fly_iboy3 小时前
系统架构设计师之数据库
数据库
风和先行3 小时前
Android 数据库相关学习总结
android·数据库·学习
宠友信息3 小时前
Spring Boot与异步审核构建仿小红书源码内容发布全流程
java·数据库·spring boot·redis·mysql·oracle·uni-app
2401_873479404 小时前
如何识别代理IP和伪装流量?用IP情报工具三步穿透住宅代理伪装
网络·数据库·网络协议·tcp/ip·ip