RDS MySQL实例的磁盘满导致实例被锁定

更新时间:

问题描述

实例磁盘满导致实例被锁定,实例无法写入数据,实例变只读实例,实例的读写模式为read-only。

问题原因

RDS MySQL实例的磁盘空间分为四种类型,因此如下4种类型文件占用磁盘空间过大会导致磁盘被锁定。

解决方案

确认占用磁盘空间过大的原因

登录RDS控制台,选择 监控与报警,查看 资源监控 中的 磁盘空间 监控。

数据文件占用磁盘空间过大

适用于RDS MySQL 5.5实例

升级磁盘空间使实例解锁,解锁后,可考虑执行drop或者truncate命令清理表。

注:

  • 该清理操作会完全删除表以或表数据并释放物理空间,请谨慎操作。
  • 不要执行delete命令,delete删除语句会造成Binlog增加,且无法直接释放物理空间。

适用于RDS MySQL 5.6实例、RDS MySQL 5.7实例、适用于RDS MySQL 8.0实例

  • 方法1:升级磁盘空间使实例解锁,解锁后,可考虑执行drop或者truncate命令清理表。
    注:
    • 该清理操作会完全删除表以或表数据并释放物理空间,请谨慎操作。
    • 不要执行delete命令,delete删除语句会造成Binlog增加,且无法直接释放物理空间。
  • 方法2:升级实例到最新的内核小版本,最新的内核小版本在实例锁定时,支持使用drop以及truncate命令操作,您可以执行drop或者truncate命令清理表,以解锁实例。
    注:该操作会完全删除表以或表数据并释放物理空间,请谨慎操作。

日志文件占用磁盘空间过大

适用于RDS MySQL 5.7版SSD云盘基础版实例

提交工单进行核实处理。

适用于RDS MySQL 5.5实例、RDS MySQL 5.6实例、RDS MySQL 5.7高可用版实例、RDS MySQL 8.0实例

  • 方法1:升级磁盘空间使实例解锁,尤其针对SSD云盘实例,无论是基础版还是高可用版,磁盘满都有可能造成实例不可用。当您遇到磁盘满问题时,优先考虑升级磁盘来解决,并且建议您提前做好磁盘的监控与报警,提前发现磁盘空间满,避免造成实例被锁定。
  • 方法2:登录RDS控制台,在备份恢复页面,单击 一键上传Binlog,清理实例空间的Binlog来解锁实例。此操作取决于Binlog的数量和大小,您只需要单击一次即可,无需重复单击。单击后请在10~20分钟内观察磁盘使用是否有下降,如果没有下降,请提交工单进行核实处理。

系统文件占用磁盘空间过大

适用于RDS MySQL 5.5实例、RDS MySQL 5.6实例

系统文件占用大量磁盘空间主要是ibdata1文件过大导致,ibdata1文件过大的原因主要是因为里面包含了undo log空间,该文件在RDS MySQL实例不支持收缩,需要您升级磁盘解决锁定问题。如果需要彻底解决ibdata1的问题,您需要创建新的实例,然后迁移业务数据到新的实例。

注:undo log是回滚日志,提供回滚操作。undo用来回滚行记录到某个版本,undo log一般是逻辑日志。

适用于RDS MySQL 5.7实例、RDS MySQL 8.0实例

RDS MySQL 5.7版本与8.0版本对undo表空间与ibdata1系统表空间进行了分离,并进行了相应的清理设置,所以undo log与ibdata1文件不会导致磁盘空间过大问题,但是5.7版和8.0版新增了ibtmp表空间,ibtmp表空间划分到了系统文件中,当使用不合理时,会造成ibtmp文件增加,从而造成磁盘锁定。您可以进行以下操作。

  1. 执行如下SQL语句,获取表空间占用情况。
    select * from INFORMATION_SCHEMA.FILES order by TOTAL_EXTENTS desc limit 100;
  2. 如果确认是ibtmp文件过大,请您重启实例以释放ibtmp文件空间,即可解锁。

临时文件占用磁盘空间过大

提示:适用于RDS MySQL 5.5实例、RDS MySQL 5.6实例、RDS MySQL 5.7实例、RDS MySQL 8.0实例。

如果是临时文件占用空间过大,请重启实例释放临时空间,即可解锁。

适用于

  • 云数据库 RDS MySQL 版