SET GLOBAL read_only = ON;的庖丁解牛

SET GLOBAL read_only = ON;是 MySQL 中用于将实例置于只读模式的关键命令。其作用远不止“禁止写入”,而是一套涉及权限、复制、高可用切换的系统级机制。


一、命令本质与作用机制

1.功能定义
  • 开启后除具有SUPER权限(MySQL 8.0 为SYSTEM_USER/SYSTEM_VARIABLES_ADMIN)的用户外,所有会话禁止执行写操作
  • 写操作包括
    • DML:INSERTUPDATEDELETEREPLACE
    • DDL:CREATEALTERDROP
    • 权限变更:GRANTREVOKE
    • 事务控制:BEGIN/START TRANSACTION仍允许,但COMMIT若含写操作则失败
2.内部实现
  • 状态标志:MySQL 服务器维护全局变量read_only(布尔值)。
  • 权限检查点
    SQL 层解析后、执行前,调用check_readonly()函数:
    if(read_only&&!thd->security_context->has_super()){my_error(ER_OPTION_PREVENTS_STATEMENT,...);returntrue;// 拒绝执行}
  • 不涉及存储引擎:InnoDB/MyISAM 本身无“只读”状态,完全由 Server 层拦截。

二、作用域与权限控制

用户类型是否受read_only限制说明
普通用户✅ 是所有写操作被拒绝
SUPER权限用户(MySQL 5.7-)❌ 否可正常写入
SYSTEM_USER+SYSTEM_VARIABLES_ADMIN(MySQL 8.0+)❌ 否替代SUPER的精细权限
复制 SQL 线程❌ 否自动豁免(即使无 SUPER)
Event Scheduler✅ 是事件中的写操作会被拒绝(除非用 SUPER 用户定义)

关键设计
复制线程必须能写入,否则主从架构崩溃。MySQL 内部对复制线程有特殊标识(thd->slave_thread = true),自动绕过检查。


三、典型应用场景

1.主从切换(Failover)
  • 流程
    1. 原主库执行SET GLOBAL read_only = ON;→ 禁止新写入
    2. 等待从库追平(Seconds_Behind_Master = 0
    3. 提升从库为主库
    4. 原主库(现从库)执行CHANGE MASTER指向新主
  • 目的:防止切换过程中双写导致数据不一致。
2.从库保护
  • 永久设置:在从库my.cnf中配置:
    [mysqld] read_only = ON
  • 效果:即使应用误连从库,也无法写入(除非用 SUPER 用户)。
3.紧急只读维护
  • 场景:主库负载过高,需临时禁止写入以排查问题。
  • 操作
    SETGLOBALread_only=ON;-- 立即生效-- 排查完成后SETGLOBALread_only=OFF;

四、重要限制与陷阱

1.不阻止临时表操作
  • 允许CREATE TEMPORARY TABLEDROP TEMPORARY TABLE
  • 原因:临时表仅当前会话可见,不影响其他用户或复制。
2.不阻止非事务性操作
  • 允许
    • SET变量(会话级)
    • SELECTSHOWEXPLAIN
    • ANALYZE TABLEOPTIMIZE TABLE(MyISAM)
3.GTID 模式下的特殊行为
  • MySQL 5.7+ GTID
    即使read_only=ONGTID_PURGED等复制相关操作仍可能被允许(需 SUPER)。
4.不持久化
  • 重启失效SET GLOBAL仅运行时生效。
  • 持久化方法
    • 写入my.cnfread_only = ON
    • MySQL 8.0+:SET PERSIST read_only = ON;(写入mysqld-auto.cnf

五、与类似机制的区别

机制作用是否影响复制线程是否需 SUPER
read_only = ON禁止用户写入❌ 不影响❌ 普通用户被禁
super_read_only = ON禁止所有写入(含 SUPER)❌ 不影响✅ 仅复制线程可写
FLUSH TABLES WITH READ LOCK全局读锁(FTWRL)✅ 阻塞复制❌ 所有写入阻塞

⚠️super_read_only更严格
用于MGR(组复制)InnoDB Cluster,确保实例完全只读(连 DBA 也不能写)。


六、验证与监控

1.检查当前状态
SHOWVARIABLESLIKE'read_only';-- +---------------+-------+-- | Variable_name | Value |-- +---------------+-------+-- | read_only | ON |-- +---------------+-------+
2.测试写入是否被拒
INSERTINTOtest.tVALUES(1);-- ERROR 1290 (HY000): The MySQL server is running with the --read-only option so it cannot execute this statement
3.监控只读状态(运维)
  • Prometheusmysql_global_variables_read_only
  • 日志:无直接日志,但应用会报ER_OPTION_PREVENTS_STATEMENT

七、总结:核心要点

  • 目的保护数据一致性,而非性能优化。
  • 豁免:复制线程、SUPER 用户(或 MySQL 8.0 精细权限)。
  • 场景:主从切换、从库保护、紧急维护。
  • 风险
    • 误开read_only导致应用写入失败
    • 未持久化导致重启后失效
  • 最佳实践
    • 从库永久配置read_only=ON
    • 主库切换时先设只读,再切从库
    • 使用super_read_only替代(如用 InnoDB Cluster)

💡本质
read_onlyMySQL 复制架构的基石安全机制,确保“一主多从”模型的数据流向可控。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1133598.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

玩赚AI艺术:基于阿里通义Z-Image-Turbo的NFT生成系统快速搭建

玩赚AI艺术:基于阿里通义Z-Image-Turbo的NFT生成系统快速搭建 低成本启动AI艺术创作:通义Z-Image-Turbo简介 对于数字艺术家而言,AI生成NFT作品是一个充满潜力的领域,但技术门槛和高昂的硬件投入往往让人望而却步。阿里通义Z-Imag…

多引擎翻译系统:CSANMT作为备选引擎的集成方案

多引擎翻译系统:CSANMT作为备选引擎的集成方案 🌐 AI 智能中英翻译服务 (WebUI API) 在多语言信息交互日益频繁的今天,高质量、低延迟的自动翻译服务已成为智能应用的核心组件之一。尤其是在全球化产品开发、跨语言内容生成和国际交流场景中…

Windows系统终极优化指南:RyTuneX完整使用手册

Windows系统终极优化指南:RyTuneX完整使用手册 【免费下载链接】RyTuneX An optimizer made using the WinUI 3 framework 项目地址: https://gitcode.com/gh_mirrors/ry/RyTuneX RyTuneX作为基于WinUI 3框架开发的Windows系统优化神器,为Windows…

轻松掌握电子课本下载完整教程:高效获取PDF教材的终极指南

轻松掌握电子课本下载完整教程:高效获取PDF教材的终极指南 【免费下载链接】tchMaterial-parser 国家中小学智慧教育平台 电子课本下载工具 项目地址: https://gitcode.com/GitHub_Trending/tc/tchMaterial-parser 还在为在线查阅教材而烦恼?每次…

APK Installer:Windows平台安卓应用无缝安装全攻略

APK Installer:Windows平台安卓应用无缝安装全攻略 【免费下载链接】APK-Installer An Android Application Installer for Windows 项目地址: https://gitcode.com/GitHub_Trending/ap/APK-Installer 还在为Windows系统无法直接运行手机应用而困扰吗&#x…

MPV播放器终极配置指南:3步完成Windows平台完美设置

MPV播放器终极配置指南:3步完成Windows平台完美设置 【免费下载链接】MPV_lazy 🔄 mpv player 播放器折腾记录 windows conf ; 中文注释配置 快速帮助入门 ; mpv-lazy 懒人包 win10 x64 config 项目地址: https://gitcode.com/g…

Bootstrap日期时间选择器完整配置与使用指南

Bootstrap日期时间选择器完整配置与使用指南 【免费下载链接】bootstrap-datetimepicker Both Date and Time picker widget based on twitter bootstrap (supports Bootstrap v2 and v3) 项目地址: https://gitcode.com/gh_mirrors/bo/bootstrap-datetimepicker 掌握Bo…

基于Java的实验室智慧管理系统的设计与实现全方位解析:附毕设论文+源代码

1. 为什么这个毕设项目值得你 pick ? 毕设选题不用愁!基于Java的实验室智慧管理系统的设计与实现全方位解析,附源代码毕设论文。该系统涵盖会员管理、实验室管理、实验项目管理等14个功能模块,旨在提高实验室管理水平和工作效率。相比传统选…

Mac百度网盘提速革命:从蜗牛爬行到极速飞驰的蜕变之旅

Mac百度网盘提速革命:从蜗牛爬行到极速飞驰的蜕变之旅 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 你是否曾经盯着百度网盘的下载进度条…

百度文库文档优化工具使用指南

百度文库文档优化工具使用指南 【免费下载链接】baidu-wenku fetch the document for free 项目地址: https://gitcode.com/gh_mirrors/ba/baidu-wenku 工具概述 百度文库文档优化工具是一款专门用于优化百度文库阅读体验的开源JavaScript工具。该工具通过智能清理页面…

如何为venera添加自定义漫画源:完整配置指南

如何为venera添加自定义漫画源:完整配置指南 【免费下载链接】venera A comic app 项目地址: https://gitcode.com/gh_mirrors/ve/venera 想要让你的venera漫画应用拥有海量资源吗?只需掌握自定义漫画源的配置方法,就能轻松扩展阅读内…

CSANMT模型输入分段:处理超长文本的实用方案

CSANMT模型输入分段:处理超长文本的实用方案 🌐 AI 智能中英翻译服务 (WebUI API) 项目背景与核心挑战 随着全球化进程加速,高质量的中英翻译需求日益增长。传统机器翻译系统在短句场景下表现尚可,但在处理长文档、技术报告或法律…

智能翻译在跨国社交平台的应用

智能翻译在跨国社交平台的应用 引言:AI 智能中英翻译服务的现实需求 在全球化加速发展的今天,跨国社交平台已成为人们沟通、协作和文化交流的重要载体。然而,语言障碍依然是阻碍信息自由流动的核心瓶颈之一。尤其是在中文用户与英语用户之间&…

Fiddler中文版终极指南:3分钟掌握网络调试神器

Fiddler中文版终极指南:3分钟掌握网络调试神器 【免费下载链接】zh-fiddler Fiddler Web Debugger 中文版 项目地址: https://gitcode.com/gh_mirrors/zh/zh-fiddler 还在为复杂的网络问题抓狂吗?Fiddler中文版让网络调试变得前所未有的简单&…

终极百度文库优化神器:一键免费获取完整文档的完整指南

终极百度文库优化神器:一键免费获取完整文档的完整指南 【免费下载链接】baidu-wenku fetch the document for free 项目地址: https://gitcode.com/gh_mirrors/ba/baidu-wenku 为什么你需要这款文档获取工具? 在日常学习和工作中,百…

XPipe终极指南:快速掌握免费服务器管理工具

XPipe终极指南:快速掌握免费服务器管理工具 【免费下载链接】xpipe Your entire server infrastructure at your fingertips 项目地址: https://gitcode.com/GitHub_Trending/xp/xpipe 在现代IT环境中,服务器管理已成为每个技术人员必须面对的挑战…

Easy-Scraper终极指南:零代码网页数据采集完全解决方案

Easy-Scraper终极指南:零代码网页数据采集完全解决方案 【免费下载链接】easy-scraper Easy scraping library 项目地址: https://gitcode.com/gh_mirrors/ea/easy-scraper 还在为复杂的数据抓取而烦恼吗?Easy-Scraper让网页数据采集变得前所未有…

如何用CSANMT实现网页内容的实时翻译插件?

如何用CSANMT实现网页内容的实时翻译插件? 🌐 AI 智能中英翻译服务 (WebUI API) 在跨语言交流日益频繁的今天,高质量、低延迟的实时翻译能力已成为许多应用场景的核心需求。无论是阅读外文资料、撰写国际邮件,还是开发多语言网…

Mac百度网盘SVIP免费解锁终极提速方案

Mac百度网盘SVIP免费解锁终极提速方案 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘蜗牛般的下载速度而烦恼吗?当你面对一…

Ultimate ASI Loader:游戏MOD管理的革命性突破

Ultimate ASI Loader:游戏MOD管理的革命性突破 【免费下载链接】Ultimate-ASI-Loader ASI Loader is the tool that loads custom libraries with the file extension .asi into any game process. 项目地址: https://gitcode.com/gh_mirrors/ul/Ultimate-ASI-Loa…