
# 数据库磁盘满导致被设置read_only
#### 场景描述
业务侧出现如下报错：
```
The MySQL server is running with the --read-only option so it cannot execute this statement
```
#### 原因分析
1. 在实例概览页，查看磁盘空间是否已满。
   图1存储与备份   
   ![](https://support.huaweicloud.com/trouble-rds-mysql/zh-cn_image_0000002708681160.png "点击放大") 
2. 登录数据库，查看read_only变量。
   ```
   show variables like 'read_only';
   ```
   
3. 分析原因为实例磁盘空间满，数据库状态变更为只读，导致SQL语句执行失败。
4. 通过智能DBA助手查看磁盘空间占用分布，具体操作请参见[管理磁盘容量](https://support.huaweicloud.com/usermanual-rds-mysql/rds_08_0028.html)。
   图2磁盘空间分布   
   ![](https://support.huaweicloud.com/trouble-rds-mysql/zh-cn_image_0000002738447857.png "点击放大") 
 
#### 解决方案
1. 随着业务数据的增加，原来申请的数据库磁盘容量可能会不足，建议用户[扩容磁盘空间](https://support.huaweicloud.com/usermanual-rds-mysql/zh-cn_topic_scale_cluster.html)，确保磁盘空间足够。
   如果原有规格的磁盘已是最大，请先[升级规格](https://support.huaweicloud.com/usermanual-rds-mysql/zh-cn_topic_scale_rds.html)。
   云盘实例可以设置[存储空间自动扩容](https://support.huaweicloud.com/usermanual-rds-mysql/rds_05_0039.html)，在实例存储空间达到阈值时，会触发自动扩容。
   
2. 针对数据空间过大，可以删除无用的历史表数据。
   1. 如果实例变为只读状态，您需要先[解除只读](https://support.huaweicloud.com/usermanual-rds-mysql/zh-cn_topic_scale_cluster.html)状态；如果实例非只读状态，则可以直接执行删除操作。
   
   2. 查看物理文件大小Top50库表，识别可以删除的历史表数据，具体操作请参见[容量预估](https://support.huaweicloud.com/usermanual-rds-mysql/rds_08_0028.html)。
   
   3. 可在业务低峰期对碎片率高的表执行optimize优化，以便释放空间： 清理整张表使用**DROP** 或**TRUNCATE** 操作；删除部分数据，使用**DELETE** 操作，如果是执行**DELETE** 操作，需要使用**OPTIMIZE TABLE**来释放空间。
      
    
3. 如果是RDS for MySQL Binlog日志文件占用过多，可以[一键清理Binlog](https://support.huaweicloud.com/usermanual-rds-mysql/rds_08_0048.html)，来释放磁盘空间。
4. 针对大量排序查询导致的临时文件过大，建议优化SQL查询。 查询数据库[慢SQL](https://support.huaweicloud.com/usermanual-rds-mysql/rds_08_0030.html)和[Top SQL](https://support.huaweicloud.com/usermanual-rds-mysql/rds_08_0031.html)，分析数据量大，行数多，响应时间长的SQL语句，并进行优化。
   
5. 您还可以订阅实例健康日报来获取SQL及性能分析结果，包括慢SQL分析、全量SQL分析、性能 \& 磁盘分析、性能指标趋势图，当发生风险点时及时收到诊断报告。 具体操作请参见[诊断日报](https://support.huaweicloud.com/usermanual-rds-mysql/rds_08_0035.html)。
   
 
