You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Amazon S3中删除7天前文件,且保留近6个月每月1日的备份?

Amazon S3数据库备份生命周期规则配置(满足7天清理+每月1日保留6个月需求)

需求回顾

  • 每日生成格式为db_dumpYYYYMMDDHHMMSS.gz的数据库转储文件并上传至S3
  • 自动删除存储超过7天的普通备份
  • 保留近6个月内每月1日生成的备份文件

推荐方案:S3原生生命周期规则(无需额外脚本)

直接利用S3的生命周期规则就能实现,配置两个互补的规则即可:

规则1:保留每月1日的备份6个月

  1. 进入S3存储桶的「管理」标签,点击「创建生命周期规则」
  2. 规则名称:Retain-Monthly-First-Backups
  3. 适用对象:选择「前缀匹配」,输入db_dump??????01(匹配所有每月1日生成的备份,比如db_dump20240501xxxxxx.gz)
  4. 配置过期:勾选「在对象创建后」,输入180天(约6个月),设置过期删除
  5. 优先级:设为1(较高优先级,确保先执行保留逻辑)

规则2:清理7天以上的非保留备份

  1. 再次创建生命周期规则
  2. 规则名称:Cleanup-Old-Daily-Backups
  3. 适用对象:选择「前缀匹配」,输入db_dump,然后添加「排除前缀」db_dump??????01(避免删除每月1日的备份)
  4. 配置过期:勾选「在对象创建后」,输入7天,设置过期删除
  5. 优先级:设为2(较低优先级,让保留规则先生效)

验证逻辑

  • 普通备份(如db_dump20240520120000.gz):7天后被规则2自动删除
  • 每月1日备份(如db_dump20240501090000.gz):会被规则1保留180天,之后自动删除

备选方案:AWS CLI脚本(自定义场景)

如果需要更灵活的控制(比如结合其他条件),可以用以下脚本配合CloudWatch Events定时执行:

#!/bin/bash

BUCKET="your-bucket-name"
PREFIX="db_dumps/"

# 计算时间阈值
SEVEN_DAYS_AGO=$(date -d "-7 days" +%Y%m%d)
SIX_MONTHS_AGO=$(date -d "-6 months" +%Y%m%d)

# 遍历备份文件
aws s3 ls "s3://${BUCKET}/${PREFIX}" --recursive | while read -r line; do
    FILE_NAME=$(echo "$line" | awk '{print $4}')
    # 从文件名提取备份日期(YYYYMMDD)
    BACKUP_DATE=$(echo "$FILE_NAME" | sed -n 's/db_dump\([0-9]\{8\}\).*/\1/p')
    
    if [[ -z "$BACKUP_DATE" ]]; then
        continue
    fi

    # 判断是否为每月1日的备份
    if echo "$BACKUP_DATE" | grep -q "01$"; then
        # 超过6个月则删除
        if [[ "$BACKUP_DATE" < "$SIX_MONTHS_AGO" ]]; then
            aws s3 rm "s3://${BUCKET}/${FILE_NAME}"
        fi
    else
        # 超过7天则删除
        if [[ "$BACKUP_DATE" < "$SEVEN_DAYS_AGO" ]]; then
            aws s3 rm "s3://${BUCKET}/${FILE_NAME}"
        fi
    fi
done
  • 替换your-bucket-name和PREFIX为实际值
  • 确保执行脚本的IAM角色拥有s3:ListBucket和s3:DeleteObject权限

内容的提问来源于stack exchange,提问作者Rocky

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 18:50:32