ALTER TABLE login_log
  PARTITION BY RANGE (TO_DAYS(created_at)) (
  PARTITION p202401 VALUES LESS THAN (TO_DAYS('2024-02-01'))
);

隐私政策写着日志保留六个月,随手查了一下最早的登录记录是二〇二二年,表里六百多万行,从来没人删过。先别急着动参数,把报错原文和时间点记下来,顺序反了容易白折腾。

原因不复杂,保留期限只写在文档里,代码里没有对应任务,备份还会把旧数据一起带走。表没做分区,大批量删除又怕锁住业务写入,于是一直拖着没人动。

「数据保留期限」改完先别急着全量,挑一台机器放半天,真有问题这段时间就能看出来。动手前把原文件复制一份带时间戳,出问题立刻换回去,比现场分析快得多。

一次只改一处,改完立刻验证,几个改动叠在一起,出问题就说不清是谁导致的。

处理上按这个顺序:按时间给日志表建分区,一个月一个,过期直接 drop partition;没分区的表写定时任务分批删,每次几千行,避开高峰;备份策略同步调整,超期的备份文件一起清掉。

改完只确认一件事:跑一次清理任务,超过六个月的行数归零,最早一条记录的时间落在保留期内。

作者 9823189