mysql数据库磁盘满了怎么办

RDS实例磁盘满导致实例异常的解决方法

问题现象

RDS数据库的磁盘空间满,导致实例变为只读状态,应用无法对RDS数据库进行写入操作,从而影响业务正常运行。

通过磁盘空间占用分布发现占用高的空间,如何通过DBA助手查看磁盘空间分布请参见容量预估

图1 磁盘空间分布

问题原因

1、业务数据增加。

2、数据空间占用过大。

3、由于大量的事务和写入操作产生了大量的RDS for MySQL Binlog日志文件。

4、应用中存在大量的排序查询,产生了过多的临时文件。

解决方案

1、随着业务数据的增加,原来申请的数据库磁盘容量可能会不足,建议用户扩容磁盘空间,确保磁盘空间足够。

如果原有规格的磁盘已是最大,请先升级规格

云盘实例可以设置存储空间自动扩容,在实例存储空间达到阈值时,会触发自动扩容。

2、针对数据空间过大,可以删除无用的历史表数据。

a.如果实例变为只读状态,您需要先联系客服解除只读状态;如果实例非只读状态,则可以直接执行删除操作。

查看物理文件大小Top50库表,识别可以删除的历史表数据,具体操作请参见容量预估

b.可在业务低峰期对碎片率高的表执行optimize优化,以便释放空间:

c.清理整张表使用DROP或TRUNCATE操作;删除部分数据,使用DELETE操作,如果是执行DELETE操作,需要使用OPTIMIZE TABLE来释放空间。

3、如果是RDS for MySQL Binlog日志文件占用过多,可以清理本地Binlog日志,来释放磁盘空间。

4、针对大量排序查询导致的临时文件过大,建议优化SQL查询。

查询数据库慢SQL和Top SQL,分析数据量大,行数多,响应时间长的SQL语句,并进行优化。

5、您还可以订阅实例健康日报来获取SQL及性能分析结果,包括慢SQL分析、全量SQL分析、性能 & 磁盘分析、性能指标趋势图,当发生风险点时及时收到诊断报告。

具体操作请参见诊断日报

云数据库RDS for MySQL磁盘扩容操作场景

云数据库RDS for MySQL磁盘扩容操作场景

  • 云数据库RDS for MySQL磁盘扩容场景说明

    随着业务数据的增加,原来申请的数据库磁盘容量可能会不足,需要为云数据库RDS for MySQL实例进行扩容。实例扩容的同时备份空间也会随之扩大。


    当实例处于“磁盘空间满”状态时,需扩容至磁盘空间使用率小于85%才可使实例处于可用状态,使数据库恢复正常的写入操作。


    举个例子,当前云数据库RDS for MySQL实例的存储空间是100GB,且实例处于“磁盘空间满”状态,那么需要至少扩容100GB/85% - 100GB,才能使数据库恢复正常的写入操作。

    图1 磁盘使用率

    建议您设置“磁盘使用率”指标的告警规则,及时了解磁盘使用情况,起到预警作用,具体请参见设置告警规则。


    数据库磁盘空间不足的原因和解决方案,请参见数据超过了RDS实例的最大存储容量怎么办。


    磁盘扩容期间,服务不中断。云数据库RDS for MySQL服务只支持扩容磁盘存储空间大小,不支持变更存储类型。

如何连接测试服务器数据库

  • DAS连接

    数据管理服务DAS是一款专业的简化数据库管理工具,提供优质的可视化操作界面,大幅提高工作效率,让数据管理变得既安全又简单。GaussDB(for MySQL)默认为您开通了远程主机登录权限。

  • 内网连接

    系统默认提供内网IP地址。当应用部署在弹性云服务器上,且该弹性云服务器与GaussDB(for MySQL)实例处于同一区域,同一VPC时,建议单独使用内网IP连接弹性云服务器与GaussDB(for MySQL)数据库实例。

  • 公网连接

    不能通过内网IP地址访问GaussDB(for MySQL)实例时,使用公网访问,建议单独绑定弹性公网IP连接弹性云服务器(或公网主机)与GaussDB(for MySQL)数据库实例。

  • JDBC连接

    通过JDBC连接实例的方式有无需下载SSL证书连接和用户下载SSL证书连接两种,其中使用SSL证书连接通过了加密功能,具有更高的安全性。默认开启SSL数据加密。

GaussDB(for MySQL)常见问题解答

GaussDB(for MySQL)常见问题解答

  • 使用GaussDB(for MySQL)要注意些什么?

    数据库对应的IP地址和端口。

    对象存储服务(Object Storage Service,简称OBS)上的备份文件以及GaussDB(for MySQL)服务使用的弹性云服务器(Elastic Cloud Server,简称ECS),都对用户不可见,它们只对GaussDB(for MySQL)服务的后台管理系统可见。

    查看实例列表时请确保与购买实例选择的区域一致。

    申请GaussDB(for MySQL)实例后,您不需要进行数据库的基础运维(比如高可用、安全补丁等),但是您还需要重点关注以下事情:

    1.GaussDB(for MySQL) 实例的CPU、内存等资源是否足够,如果资源不足需及时变更规格。

    2.GaussDB(for MySQL) 实例的数据存储空间是否足够,如资源不足需及时扩容。(超出时会自动扩容,但超出部分是按需收费,价格比自行扩容贵)。

    3.GaussDB(for MySQL)实例是否存在性能问题,是否有大量的慢SQL,SQL语句是否需要优化,是否有多余的索引或者缺失的索引等。

  • 外部服务器能否访问GaussDB(for MySQL)数据库?

    通过外网进行访问。

    具体请参见:

    通过公网连接GaussDB(for MySQL)实例

    未开通公网访问的实例

    在虚拟私有云中开通虚拟专用网络(Virtual Private Network,简称VPN),通过虚拟专用网络连接GaussDB(for MySQL)。

    将GaussDB(for MySQL)与弹性云服务器创建在同一个虚拟专用网络下,通过弹性云服务器来访问GaussDB(for MySQL)。

    具体请参见:

    通过内网连接GaussDB(for MySQL)实例

  • 怎样将资源解冻?

    欠费冻结:用户可通过续费或充值来解冻资源,恢复实例正常使用。欠费冻结的实例允许续费、释放或删除;已经到期的包周期实例不能发起退订,未到期的包周期实例可以退订。

  • 冻结、解冻、释放资源时对业务的影响?

    资源冻结时:

    资源将被限制访问和使用,会导致您的业务中断。例如实例被冻结时,会使得用户无法再连接至数据库。

    包周期资源被冻结后,将被限制进行变更操作。

    资源被冻结后,可以手动进行退订/删除。

    资源解冻时:资源将被解除限制,用户可以连接至数据库。

    资源释放时:资源将被释放,实例将被删除。

  • GaussDB(for MySQL)数据库实例支持的最大数据连接数是多少?

    在my.cnf文件中修改mysqld下参数max_connections的值。

    [mysqld]

    max_connections = 1000

    关于max_connections

    max_connections:允许同时连接的客户端总数。如果设定值为default,表示该参数和数据库实例的内存(单位:GB)相关,计算公式如下:

    max_connections上限估计数值 = 节点可用内存 / 单个连接预估占用内存。

    节点可用内存=总内存 - Buffer Pool占用内存 - 1GB(mysqld进程/操作系统/监控程序等)。

    单个连接预估占用内存(single_thread_memory) = thread_stack(256KB) + binlog_cache_size(32KB) + join_buffer_size(256KB) + sort_buffer_size(256KB) + read_buffer_size(128KB) + read_rnd_buffer_size(256KB)= 大约1MB。

  • GaussDB(for MySQL)实例连接数过多,存在什么隐患?

    GaussDB(for MySQL)连接数过多,可能会导致业务侧无法正常连接,也会导致实例全量备份和增量备份失败,影响业务的正常使用。

    请及时排查业务侧连接是否有效,优化实例连接,释放不必要的连接。

    云监控服务目前可以监控数据库CPU、内存、磁盘、连接数等指标,并且设置告警策略,出现告警时可以提前识别风险。

  • GaussDB(for MySQL)提供root帐号或super权限吗?

    GaussDB(for MySQL)提供的管理员帐号为root帐号,具有去除super、file、shutdown和create tablespace后的最高权限。

    大部分的云数据库服务平台,都未给root帐号提供super权限。因为一旦用户拥有了super权限,就可以执行很多管理性的命令,比如reset master,set global…,kill,reset slave等,这类操作很有可能导致GaussDB(for MySQL)出现不可预知的异常和故障。这一点是云服务平台和本地搭建MySQL比较大的区别,GaussDB(for MySQL)提供服务化能力,那就需要保证实例的稳定正常运行。

    对于客户要求super权限的场景,GaussDB(for MySQL)提供了服务化能力,也可以通过其他手段绕过super权限的限制。

  • 访问GaussDB(for MySQL)实例应该如何配置安全组?

    通过内网访问GaussDB(for MySQL)实例时,设置安全组分为以下两种情况:

    ECS与GaussDB(for MySQL)实例在相同安全组时,默认ECS与GaussDB(for MySQL)实例互通,无需设置安全组规则。

    ECS与GaussDB(for MySQL)实例在不同安全组时,需要为GaussDB(for MySQL)和ECS分别设置安全组规则。

    设置GaussDB(for MySQL)安全组规则:为GaussDB(for MySQL)所在安全组配置相应的入方向规则。

    设置ECS安全组规则:安全组默认规则为出方向上数据报文全部放行,此时,无需对ECS配置安全组规则。当在ECS所在安全组为非默认安全组且出方向规则非全放通时,需要为ECS所在安全组配置相应的出方向规则。

    通过弹性公网IP访问GaussDB(for MySQL)实例时,需要为GaussDB(for MySQL)所在安全组配置相应的入方向规则。