AWS RDS MySQL实例手动清理审计日志的问题求助
解决MySQL RDS上MariaDB Audit Plugin冗余日志无法自动清理的问题
问题原因
修改SERVER_AUDIT_FILE_ROTATIONS参数后,MariaDB Audit Plugin不会自动清理之前生成的旧格式日志(三位数字后缀的文件),且新日志会按照当前参数的位数生成(60为两位数,故使用两位数字后缀),导致新旧日志堆积累计占用100GB空间。
解决方案
1. 使用插件内置命令清理符合当前规则的日志
连接到RDS实例的MySQL客户端后,执行以下存储过程,插件会根据当前SERVER_AUDIT_FILE_ROTATIONS设置(60)自动清理超出保留数量的日志:
CALL server_audit_cleanup();
注意:此命令仅识别当前格式的日志文件(即两位数字后缀的新日志),无法处理之前生成的三位数字后缀旧日志,需配合手动删除操作。
2. 手动删除旧格式冗余日志(通过AWS CLI)
由于RDS无法直接登录实例操作文件系统,需使用AWS CLI的delete-db-log-file命令批量删除三位数字后缀的旧日志。
步骤:
- 先列出所有审计日志文件,确认需要删除的目标:
aws rds describe-db-log-files --db-instance-identifier your-rds-instance-name --filename-contains audit/server_audit.log
- 批量删除超出保留数量的旧日志(例如删除
server_audit.log.061到server_audit.log.099),可通过循环生成命令执行:
for i in {61..99}; do aws rds delete-db-log-file --db-instance-identifier your-rds-instance-name --log-file-name "audit/server_audit.log.0$i" done
替换your-rds-instance-name为你的RDS实例ID,执行前确认这些日志无需保留(删除后不可恢复)。
3. 重启RDS实例(谨慎操作)
若上述方法无法彻底清理,可在维护窗口内重启RDS实例,Audit Plugin会重新初始化日志管理逻辑。但重启会导致服务短暂中断,需提前做好业务预案。重启后仍需手动清理残留的旧格式日志。
预防措施
- 修改日志轮转参数后,立即手动清理旧格式日志,避免新旧日志共存占用空间;
- 开启RDS日志导出到CloudWatch Logs,将审计日志归档到云端,减少本地存储压力;
- 定期通过
describe-db-log-files命令检查日志占用情况,及时清理冗余文件。
内容的提问来源于stack exchange,提问作者Aamit
相关产品推荐
相关产品推荐

