如何将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
相关产品推荐
相关产品推荐

