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

如何每日自动定期将SQL Server备份上传至AWS S3并保留最近10份

问题解答

1. 脚本选择:优先用Windows PowerShell

直接选PowerShell,理由很明确:

  • PowerShell对结构化数据(比如AWS CLI返回的JSON)、日期排序、条件判断的支持远强于.bat脚本,处理S3对象元数据(如最后修改时间)更省心
  • 复杂逻辑(比如统计文件数量、筛选旧文件)的实现成本低,后期维护和扩展更简单
  • 不用像.bat那样靠繁琐的字符串切割来解析命令输出

2. 检查存储桶文件数量&删除旧文件的逻辑

核心流程:

  1. 用aws s3 ls列出存储桶内的目标备份文件(可通过前缀/后缀过滤)
  2. 提取文件的最后修改时间(或按文件名中的日期)排序,统计总数量
  3. 若数量≥10,计算超出的数量,删除排序最靠前的(最旧的)多余文件

3. 示例代码

前置准备

  • 已安装AWS CLI并完成凭证配置(执行aws configure输入密钥和区域)
  • 备份文件命名规则可识别(比如前缀为ERP_Backup_,后缀为.bak)

PowerShell脚本示例

# 配置参数
$bucketName = "your-erp-backup-bucket"
$localBackupFile = "C:\SQLServerBackups\ERP_Daily_Backup.bak" # 当日生成的备份文件路径
$s3BackupDir = "ERP_Daily_Backups/" # S3中备份文件的存放目录(可选)
$keepLatestCount = 10

# 1. 上传最新备份到S3
Write-Host "开始上传当日备份..."
aws s3 cp $localBackupFile s3://$bucketName/$s3BackupDir --quiet

# 2. 获取存储桶内所有备份文件并按修改时间从旧到新排序
Write-Host "获取存储桶内已有备份列表..."
$existingBackups = aws s3 ls s3://$bucketName/$s3BackupDir --recursive --output json | ConvertFrom-Json
$sortedBackups = $existingBackups | Sort-Object -Property LastModified

# 3. 删除超出数量的最旧备份
$excessNum = $sortedBackups.Count - $keepLatestCount
if ($excessNum -gt 0) {
    Write-Host "发现$excessNum份超出保留数量的备份,开始删除最旧文件..."
    for ($i=0; $i -lt $excessNum; $i++) {
        $oldBackupKey = $sortedBackups[$i].Key
        aws s3 rm s3://$bucketName/$oldBackupKey --quiet
        Write-Host "已删除旧备份:$oldBackupKey"
    }
} else {
    Write-Host "当前备份数量($($sortedBackups.Count)/$keepLatestCount)符合要求,无需删除"
}

补充说明

  • 如果备份文件名自带日期(比如ERP_Backup_20240520.bak),也可以按文件名排序,把排序逻辑改成Sort-Object -Property Key即可
  • 可添加错误处理:用try/catch包裹上传命令,上传失败时终止脚本
  • 自动执行:通过Windows任务计划程序,设置每日定时触发,执行命令:powershell.exe -ExecutionPolicy Bypass -File "C:\Scripts\UploadERPBackupToS3.ps1"

为什么不推荐.bat?

.bat脚本处理AWS CLI的JSON输出需要靠findstr、嵌套for循环做字符串切割,逻辑繁琐且容易出错,比如日期排序、对象属性提取这类操作几乎没法优雅实现,后期维护成本极高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 07:54:20