周一早上有 4 个账号的角色被清空,接口全部 403。查审计表最近记录停在 6 天前,清理任务每天凌晨 3 点删 7 天前的数据,恰好把出事那天的记录带走了。第一次遇到会往复杂处想,其实漏掉的多是个小前提。

SHOW VARIABLES LIKE 'audit_retention_days';
SELECT MIN(created_at), MAX(created_at) FROM audit_log;
-- 最大值停在 6 天前 说明中间被删过

审计日志和应用日志共用一张表,保留策略按应用日志的 7 天配。权限变更这种低频高价值的记录没有单独归档,出事后想回溯已经没数据。这一点先确认清楚,后面就不用反复试。

「审计日志被清理」相关的日志我一般连着看前后五分钟,单看一条报错经常判断不出是哪一步失败。把这次用到的命令存进笔记,比记住结论有用,换个环境还能照着走。

具体做法是,审计日志单独建表 保留 180 天以上;清理任务按表区分 不要用同一个保留天数;清理前先归档到冷存储 支持按时间恢复。

改完照着核一遍,权限变更后审计表能查到 90 天前的记录,清理任务日志里只删应用日志分区。

作者 9823189