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

如何将Windows Server的SQL备份文件迁移至AWS S3并保留本地30天备份?

问题解答

1. 删除本地文件后,aws s3 sync 是否会同步删除S3中的对应文件?

默认情况下不会。aws s3 sync 的核心逻辑是将本地新增/修改的文件同步到S3,不会主动删除S3中存在但本地已删除的文件。只有当你添加 --delete 参数时,才会强制让S3文件与本地保持完全一致(即本地删除的文件,S3也会同步删除)。

你的场景是保留S3备份、仅清理本地旧文件,所以不要添加--delete参数,当前的sync写法是安全的。

2. 能否仅通过AWS命令设置相关规则?

可以通过两种AWS原生方式实现需求:

  • S3生命周期规则:如果需要对S3中的备份文件也做自动化管理(比如自动删除S3中超过指定天数的备份),可以直接在S3存储桶控制台或通过AWS CLI配置生命周期规则,无需本地脚本干预。示例CLI命令(设置S3中前缀为backups/的文件30天后自动过期):
    aws s3api put-bucket-lifecycle-configuration --bucket your-bucket-name --lifecycle-configuration '{
      "Rules": [
        {
          "ID": "ExpireOldBackups",
          "Prefix": "backups/",
          "Status": "Enabled",
          "Expiration": {
            "Days": 30
          }
        }
      ]
    }'
    
  • 简化同步逻辑:如果仅需保留本地清理+S3备份的逻辑,无需额外AWS命令,保持你当前的sync+PowerShell清理组合即可——因为sync默认不会删除S3文件,刚好匹配你的需求。

3. 能否将PowerShell与AWS CLI脚本放入单个bat文件,通过任务计划程序执行?

完全可以,以下是具体的bat文件写法:

@echo off
:: 同步指定目录到S3存储桶
aws s3 sync "D:\Program data\..." s3://bucket_path

:: 执行PowerShell命令删除本地超过30天的旧文件
powershell -Command "Get-ChildItem 'D:\Program data\...' | Where-Object { $_.LastWriteTime -lt (Get-Date).AddDays(-30) } | Remove-Item -Force"

任务计划程序配置要点:

  • 触发器:设置为需要执行的时间(比如每天凌晨2点)
  • 操作:选择「启动程序」,程序/脚本填写bat文件的完整路径
  • 权限:确保执行任务的账户拥有:
    • 本地备份目录的读写权限
    • AWS CLI的凭证权限(已通过aws configure完成配置)
  • 其他设置:勾选「不管用户是否登录都要运行」,如果不需要弹窗可勾选「隐藏」

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 23:55:26