当RDS MySQL实例general_log文件过大,导致实例存储空间占满时,您可以参照本文的指引来并清理general_log文件。
问题描述
RDS MySQL实例存储空间满,通过如下排查,确认为general_log文件过大导致。
查看实例存储空间使用量,sys_data_size文件过大。详情请参见查看监控信息。
查看实例参数,实例已开启general_log(运行参数值为ON)。详情请参见查看实例参数。
连接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文件
关闭general_log(运行参数值设为OFF),防止产生新的日志。详情请参见设置实例参数。
使用高权限账号连接RDS MySQL实例并执行如下语句,清理general_log文件。连接实例的详细请参见连接RDS MySQL实例。
TRUNCATE TABLE mysql.general_log;
后续维护
建议只在调试或跟踪问题时临时开启general_log,使用完成之后请及时关闭general_log。
建议您开启SQL洞察和审计,该功能可以自动记录和分析来自数据库内核的SQL语句,以及SQL语句的执行账号、IP地址、执行详情等信息,对实例性能没有影响。并且SQL洞察和审计数据存储在数据库自治服务DAS中,不占用RDS MySQL存储空间。
扩容实例存储空间,详情请参见变更配置。您也可以开启存储空间自动扩容,在实例存储空间达到设定的阈值时,系统会自动扩容存储空间,详情请参见设置存储空间自动扩容。
- 本页导读 (1)