文档

RDS MySQL general_log文件导致实例存储空间满的解决办法

更新时间:

当RDS MySQL实例general_log文件过大,导致实例存储空间占满时,您可以参照本文的指引来并清理general_log文件。

问题描述

RDS MySQL实例存储空间满,通过如下排查,确认为general_log文件过大导致。

  1. 查看实例存储空间使用量,sys_data_size文件过大。详情请参见查看监控信息

  2. 查看实例参数,实例已开启general_log(运行参数值为ON)。详情请参见查看实例参数

  3. 连接RDS MySQL实例并执行如下语句,查询发现general_log文件过大。连接实例的详细请参见连接RDS MySQL实例

    SELECT table_schema AS '数据库', table_name,SUM(data_length + index_length + data_free)/1024/1024 AS "表大小MB",SUM(DATA_FREE)/1024/1024 AS "碎片大小MB"
    FROM information_schema.TABLES
    WHERE table_name='general_log'
    说明
    • 此SQL语句会从information_schema 数据库的TABLES表中检索mysql.general_log表的数据,然后将其转换成以MB为单位的大小。

    • 此SQL语句获得的数据为抽样数据,和实际数据存在一定误差。

问题原因

当RDS MySQL开启了general_log后,该文件记录了用户的所有操作,包括每条SQL语句的执行细节,无论是查询、插入、更新还是删除操作。当访问量大或者长时间不清理general_log文件时,会占用大量的存储空间,导致存储空间耗尽。

解决方法

清理general_log文件

  1. 关闭general_log(运行参数值设为OFF),防止产生新的日志。详情请参见设置实例参数

  2. 使用高权限账号连接RDS MySQL实例并执行如下语句,清理general_log文件。连接实例的详细请参见连接RDS MySQL实例

    TRUNCATE TABLE mysql.general_log;

后续维护

  • 建议只在调试或跟踪问题时临时开启general_log,使用完成之后请及时关闭general_log。

  • 建议您开启SQL洞察和审计,该功能可以自动记录和分析来自数据库内核的SQL语句,以及SQL语句的执行账号、IP地址、执行详情等信息,对实例性能没有影响。并且SQL洞察和审计数据存储在数据库自治服务DAS中,不占用RDS MySQL存储空间。

  • 扩容实例存储空间,详情请参见变更配置。您也可以开启存储空间自动扩容,在实例存储空间达到设定的阈值时,系统会自动扩容存储空间,详情请参见设置存储空间自动扩容

  • 本页导读 (1)
文档反馈