news 2026/4/29 1:09:30

MySQL数据库突然变成只读了?别慌,5分钟教你用SET GLOBAL read_only=0搞定

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
MySQL数据库突然变成只读了?别慌,5分钟教你用SET GLOBAL read_only=0搞定

MySQL数据库突然变成只读了?5分钟紧急恢复写入权限指南

问题现象与紧急判断

凌晨三点,你正熬夜赶一个紧急版本上线,突然发现应用日志里爆出一连串刺眼的错误:"The MySQL server is running with the --read-only option so it cannot execute this statement"。数据库突然拒绝所有写入操作,而明天早上CEO还要看实时数据看板——这种场景足以让任何运维人员血压飙升。

典型症状包括

  • INSERT/UPDATE语句全部报错
  • 只有SELECT查询能正常执行
  • 应用日志出现"read-only"相关错误码(如ERROR 1290)
  • 管理后台无法修改任何数据

遇到这种情况先别急着重启服务。去年我们有个客户在恐慌中重启了生产数据库,结果导致从库同步中断,反而让问题复杂化。正确的做法是先用这个命令快速确认状态:

SHOW GLOBAL VARIABLES LIKE 'read_only';

如果返回结果是ON,那么恭喜你找到了病因。但别急着修改参数,先花30秒做个快速检查清单:

  1. 检查最近是否有人为操作(比如SET GLOBAL read_only=1
  2. 查看磁盘空间是否已满(df -h
  3. 确认数据库是否运行在从库模式(SHOW SLAVE STATUS
  4. 检查是否有未完成的批量操作占用资源

三种紧急恢复方案

方案一:直接关闭只读模式(最快)

适用于明确知道问题根源且需要立即恢复的场景:

SET GLOBAL read_only = 0;

这个命令就像数据库的"紧急制动解除"开关。去年双十一大促时,某电商平台从库意外切换为主库后触发只读模式,就是用这个方法在28秒内恢复了写入能力。

但要注意

  • 需要SUPER权限(通常只有管理员账号具备)
  • 不会持久化,重启后可能恢复原状
  • 如果是磁盘满导致的只读,必须先清理空间

方案二:通过配置文件永久修改

适合需要长期关闭只读模式的场景:

  1. 找到MySQL配置文件(通常是/etc/my.cnf/etc/mysql/my.cnf
  2. 在[mysqld]段添加或修改:
    read_only = 0
  3. 重启MySQL服务:
    systemctl restart mysql

小技巧:可以用这个命令快速定位配置文件位置:

mysql --help | grep "my.cnf"

方案三:从库环境特殊处理

如果是复制环境中的从库意外变成只读,需要先确认复制状态:

SHOW SLAVE STATUS\G

关键检查点:

  • Slave_IO_Running和Slave_SQL_Running是否为Yes
  • Seconds_Behind_Master延迟时间
  • Last_Error是否有报错

只有当主从同步正常时,才能安全地关闭只读模式。去年我们遇到过一个经典案例:某金融系统从库因为网络抖动导致同步中断,自动开启了只读模式保护数据。如果当时强行关闭只读,就会造成主从不一致。

深度排查与预防措施

常见触发原因统计

根据2023年MySQL用户调查报告,只读模式突然激活的前五大原因是:

排名原因占比典型场景
1磁盘空间耗尽38%日志文件暴涨
2主从切换异常25%高可用自动故障转移
3人为误操作18%运维人员执行错误命令
4文件权限变更12%安全加固后未正确配置
5InnoDB强制恢复模式7%数据库崩溃后自动恢复

自动化监控方案

建议在生产环境配置这些监控指标:

# 监控只读状态的Shell脚本示例 #!/bin/bash read_only=$(mysql -uroot -p"$MYSQL_PWD" -Ne "SHOW GLOBAL VARIABLES LIKE 'read_only'" | awk '{print $2}') [ "$read_only" = "ON" ] && alert "MySQL read_only is ON!"

可以集成到Prometheus等监控系统中,配合这个Grafana报警规则:

SELECT variable_value FROM global_variables WHERE variable_name = 'read_only' AND variable_value = 'ON'

高级防护配置

对于关键业务数据库,建议在my.cnf中添加这些保险措施:

[mysqld] # 防止磁盘满导致只读 innodb_read_only_compressed=OFF # 设置自动清理阈值 innodb_purge_threads=4 # 保留5%的磁盘空间保护 innodb_fast_shutdown=0

典型故障案例分析

案例一:磁盘空间耗尽

某社交平台凌晨突然无法发布新内容,检查发现:

$ df -h /dev/mapper/vg-data 99% 500G 495G 5G 99% /var/lib/mysql

解决步骤

  1. 临时清理日志文件腾出空间
  2. 立即关闭只读模式
  3. 设置自动日志轮转
  4. 添加磁盘空间监控

案例二:主从切换异常

某电商系统在机房迁移时出现从库只读锁定:

mysql> SHOW SLAVE STATUS\G Slave_IO_State: Reconnecting after a failed master event read Last_IO_Error: error reconnecting to master

正确处理流程

  1. 先修复主从连接问题
  2. 确认数据一致性
  3. 再关闭只读模式
  4. 重新建立复制关系

性能优化建议

即使解决了只读问题,也要注意这些潜在性能影响:

  1. 写缓冲压力:长时间只读后突然恢复写入可能导致I/O飙升

    SHOW ENGINE INNODB STATUS\G

    关注INSERT BUFFER部分

  2. 连接池冲击:应用层可能堆积了大量重试请求

    SHOW STATUS LIKE 'Threads_connected';
  3. 查询缓存失效

    RESET QUERY CACHE;

建议在恢复写入后立即执行这个健康检查脚本:

#!/bin/bash mysql -uroot -p"$PASSWORD" <<EOF CHECK TABLE important_db.* FAST QUICK; ANALYZE TABLE important_db.*; OPTIMIZE TABLE important_db.critical_table; EOF

记住,预防胜于治疗。定期检查这些参数能有效降低突发只读风险:

-- 每周例行检查清单 SELECT (SELECT variable_value FROM global_variables WHERE variable_name = 'read_only') AS read_only, (SELECT SUM(data_length+index_length)/1024/1024 FROM information_schema.tables WHERE table_schema NOT IN ('mysql','information_schema','performance_schema')) AS db_size_mb, (SELECT variable_value FROM global_status WHERE variable_name = 'Innodb_buffer_pool_wait_free') AS buffer_pool_wait;
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/29 1:08:25

STM32 HAL库SPI实战:从阻塞收发到DMA中断,三种模式到底怎么选?

STM32 HAL库SPI实战&#xff1a;从阻塞收发到DMA中断&#xff0c;三种模式到底怎么选&#xff1f; 在嵌入式开发中&#xff0c;SPI通信因其高速、全双工的特性被广泛应用于Flash存储、传感器数据采集等场景。面对不同的应用需求&#xff0c;STM32 HAL库提供了三种SPI数据传输模…

作者头像 李华
网站建设 2026/4/29 1:07:35

JAVA高精度

// 1. 通过字符串&#xff08;最常用&#xff09; BigInteger bigInt1 new BigInteger("123456789012345678901234567890");// 2. 通过基本类型转换&#xff08;使用valueOf静态方法&#xff09; BigInteger bigInt3 BigInteger.valueOf(100L); // 长整型问题描述…

作者头像 李华
网站建设 2026/4/29 1:07:35

【VS Code Dev Containers 性能优化黄金法则】:20年专家亲授5大容器启动加速技巧,90%开发者忽略的配置陷阱

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;Dev Containers 性能瓶颈的根源诊断 Dev Containers 在提供环境一致性的同时&#xff0c;常因底层资源映射、文件系统同步及容器运行时配置不当引发显著性能衰减。精准定位瓶颈需从宿主与容器双视角切…

作者头像 李华
网站建设 2026/4/29 0:57:28

AI 开源项目空间-对比分析

目录 1. 模型与数据驱动型空间 2. Agent 架构与编排空间 3. 高性能与科研协同空间 4. 自动化与工程空间 &#x1f4a1; 建议关注趋势&#xff1a; 1. 模型与数据驱动型空间 这类空间不仅托管代码&#xff0c;更强调模型权重和高质量数据集的共享&#xff0c;是 AI 研发的核…

作者头像 李华