在使用云数据库 MySQL 实例的过程中,随着数据文件越来越多,存储空间也逐渐占满,为避免数据丢失,系统会对云数据库 MySQL 实例进行自动锁定,锁定之后,将无法进行写入操作。
问题描述
云数据库 MySQL 实例的数据文件占满当前实例的存储空间,导致出现存储超用锁定问题,实例运行状态为“锁定中(容量超限)”。
问题原因
云数据库 MySQL 实例存储空间占满,为避免数据丢失,系统对云数据库 MySQL 实例进行了自动锁定,锁定之后将无法进行写入操作。
解决思路
1. 对实例的硬盘进行扩容。在创建云数据库 MySQL 实例时,为实例选择了一定的硬盘空间,后续可通过扩容增加硬盘的容量,操作参见 扩容实例硬盘空间。
2. 清理无用的数据。定期清理不需要的历史数据,操作参见 清理无用的数据。
解决方法
一、扩容实例硬盘空间
1. 登录 MySQL 控制台。
2. 在实例列表,单击实例 ID 或操作列的管理进入实例管理页。
3. 在实例详情 > 实例配置后单击调整配置。

4. 在跳转页面对硬盘进行扩容。
二、清理无用的数据或无用表
注意:
对于数据的清理请您谨慎操作,如非必要,不推荐清理数据,请采用扩容方式解除锁定,如果必须清理,请在清理前对数据库进行备份,避免数据丢失。
云数据库 MySQL 中
delete 命令是无法释放存储空间的,推荐使用 drop 或 truncate 命令释放存储空间。当 MySQL 表数据量较大时,通过 DELETE 语句清理数据并不会直接释放磁盘空间,仅会将数据库记录或数据页标记为可重用。若需要真正回收表空间并减少磁盘占用,可通过
OPTIMIZE TABLE 实现。参考:使用 OPTIMIZE TABLE 命令释放 MySQL 实例的表空间。清理数据文件可能有延迟,请耐心等待实例已使用空间的下降。
1. 连接云数据库 MySQL 实例,连接方法可参考 连接 MySQL 实例。
2. 执行以下命令,查看数据库的表大小,确认其中可以删除的历史数据或无用数据。
SELECT file_name, concat(TOTAL_EXTENTS,'M') as 'FIle_size' FROM INFORMATION_SCHEMA.FILES order by TOTAL_EXTENTS DESC
3. 使用
drop 或 truncate 命令清理数据。drop 命令:
drop table <数据库名>.<表名>;
truncate 命令:
truncate table <数据库名>.<表名>;
后续维护
实例运行状态由“锁定中(容量超限)”恢复为“运行中”,则表示存储空间超用锁已解除,在后续的使用中,您可注意以下几点,定期维护数据库实例,避免再次出现硬盘空间超用锁定情况。
1. 设置存储空间超用锁定事件告警,系统实时关注实例存储空间使用情况,可推送预警通知,便于您掌握存储情况,设置方法参见 如何设置硬盘超用锁定事件告警。
2. 设置合适的自动备份文件保留时长,设置方法参见 备份数据库。
3. 定期删除不需要的历史手动备份,操作方法参见 删除备份。
4. 注意订阅监控指标告警(方法参见 告警策略),及时清理数据或进行数据拆分,使磁盘利用率不超过80%,您可通过控制台,在实例管理 > 实例监控中查看。
5. 对于临时文件较大的场景,应优化 SQL 语句,避免频繁使用
ORDER BY、GROUP BY 操作。附录:如何查看实例的硬盘空间(存储空间)使用情况
1. 登录 MySQL 控制台。
2. 在实例列表,单击实例 ID 或操作列的管理进入实例管理页。
3. 在实例详情 > 磁盘用量中,查看存储使用情况。
