Amazon DocumentDB 备份与恢复 #

一、备份概述 #

1.1 备份类型 #

text
DocumentDB备份类型:
├── 自动备份
│   ├── 每日自动备份
│   ├── 事务日志备份
│   └── 时间点恢复(PITR)
│
└── 手动快照
    ├── 用户触发
    ├── 持久保存
    └── 可跨区域复制

1.2 备份特点 #

text
备份特点:
├── 自动备份无需停机
├── 备份不影响性能
├── 存储在S3
├── 加密存储
├── 可跨区域复制
└── 按使用量计费

二、自动备份 #

2.1 启用自动备份 #

bash
# 创建集群时启用自动备份
aws docdb create-db-cluster \
  --db-cluster-identifier my-cluster \
  --backup-retention-period 7 \
  --preferred-backup-window "03:00-04:00"

# 修改备份保留期
aws docdb modify-db-cluster \
  --db-cluster-identifier my-cluster \
  --backup-retention-period 14 \
  --apply-immediately

2.2 备份保留期 #

text
保留期选项:
├── 1-35天
├── 默认:1天
├── 建议:7-14天
└── 0表示禁用自动备份

2.3 备份窗口 #

bash
# 设置备份窗口
aws docdb modify-db-cluster \
  --db-cluster-identifier my-cluster \
  --preferred-backup-window "03:00-04:00" \
  --apply-immediately

# 窗口格式:HH:MM-HH:MM
# UTC时间

2.4 查看备份状态 #

bash
# 查看集群备份配置
aws docdb describe-db-clusters \
  --db-cluster-identifier my-cluster \
  --query 'DBClusters[0].[BackupRetentionPeriod,PreferredBackupWindow]'

三、手动快照 #

3.1 创建快照 #

bash
# 创建集群快照
aws docdb create-db-cluster-snapshot \
  --db-cluster-snapshot-identifier my-snapshot-20240115 \
  --db-cluster-identifier my-cluster

# 输出
{
  "DBClusterSnapshot": {
    "DBClusterSnapshotIdentifier": "my-snapshot-20240115",
    "DBClusterIdentifier": "my-cluster",
    "SnapshotCreateTime": "2024-01-15T03:00:00Z",
    "Status": "creating"
  }
}

3.2 查看快照 #

bash
# 查看所有快照
aws docdb describe-db-cluster-snapshots

# 查看特定快照
aws docdb describe-db-cluster-snapshots \
  --db-cluster-snapshot-identifier my-snapshot-20240115

# 查看集群的所有快照
aws docdb describe-db-cluster-snapshots \
  --db-cluster-identifier my-cluster

3.3 复制快照 #

bash
# 复制快照(同区域)
aws docdb copy-db-cluster-snapshot \
  --source-db-cluster-snapshot-identifier arn:aws:docdb:us-east-1:123:snapshot:my-snapshot \
  --target-db-cluster-snapshot-identifier my-snapshot-copy

# 跨区域复制
aws docdb copy-db-cluster-snapshot \
  --source-db-cluster-snapshot-identifier arn:aws:docdb:us-east-1:123:snapshot:my-snapshot \
  --target-db-cluster-snapshot-identifier my-snapshot-copy \
  --source-region us-east-1 \
  --region us-west-2

3.4 删除快照 #

bash
# 删除快照
aws docdb delete-db-cluster-snapshot \
  --db-cluster-snapshot-identifier my-snapshot-20240115

3.5 快照标签 #

bash
# 为快照添加标签
aws docdb add-tags-to-resource \
  --resource-name arn:aws:docdb:us-east-1:123:snapshot:my-snapshot \
  --tags Key=BackupType,Value=Manual Key=Retention,Value=30days

四、时间点恢复(PITR) #

4.1 恢复到指定时间 #

bash
# 恢复到指定时间点
aws docdb restore-db-cluster-to-point-in-time \
  --db-cluster-identifier my-cluster-restored \
  --source-db-cluster-identifier my-cluster \
  --restore-to-time 2024-01-15T10:00:00Z

# 恢复到最新时间
aws docdb restore-db-cluster-to-point-in-time \
  --db-cluster-identifier my-cluster-restored \
  --source-db-cluster-identifier my-cluster \
  --use-latest-restorable-time

4.2 可恢复时间范围 #

text
可恢复时间:
├── 最早时间:自动备份保留期开始
├── 最新时间:最近5分钟前
├── 时间格式:YYYY-MM-DDTHH:MM:SSZ
└── UTC时间

4.3 查看可恢复时间 #

bash
# 查看可恢复时间范围
aws docdb describe-db-clusters \
  --db-cluster-identifier my-cluster \
  --query 'DBClusters[0].[EarliestRestorableTime,LatestRestorableTime]'

4.4 恢复后操作 #

bash
# 恢复后需要创建实例
aws docdb create-db-instance \
  --db-instance-identifier my-cluster-restored-primary \
  --db-instance-class db.r6g.large \
  --engine docdb \
  --db-cluster-identifier my-cluster-restored

五、从快照恢复 #

5.1 恢复集群 #

bash
# 从快照恢复集群
aws docdb restore-db-cluster-from-snapshot \
  --db-cluster-identifier my-cluster-restored \
  --snapshot-identifier my-snapshot-20240115 \
  --engine docdb

5.2 恢复到不同VPC #

bash
# 恢复到不同VPC
aws docdb restore-db-cluster-from-snapshot \
  --db-cluster-identifier my-cluster-new-vpc \
  --snapshot-identifier my-snapshot-20240115 \
  --engine docdb \
  --db-subnet-group-name new-subnet-group \
  --vpc-security-group-ids sg-new12345

5.3 恢复选项 #

bash
# 完整恢复选项
aws docdb restore-db-cluster-from-snapshot \
  --db-cluster-identifier my-cluster-restored \
  --snapshot-identifier my-snapshot-20240115 \
  --engine docdb \
  --engine-version 5.0.0 \
  --db-subnet-group-name my-subnet-group \
  --vpc-security-group-ids sg-12345 \
  --db-cluster-parameter-group-name custom-params \
  --kms-key-id alias/my-key \
  --deletion-protection

六、跨区域备份 #

6.1 启用跨区域复制 #

bash
# 启用跨区域快照复制
aws docdb modify-db-cluster \
  --db-cluster-identifier my-cluster \
  --enable-cloudwatch-logs-exports '["audit","profiler"]' \
  --apply-immediately

# 注意:DocumentDB目前不支持自动跨区域快照复制
# 需要手动复制或使用AWS Backup

6.2 使用AWS Backup #

bash
# 创建备份计划
aws backup create-backup-plan \
  --backup-plan '{
    "BackupPlanName": "DocumentDB-Daily-Backup",
    "BackupRules": [
      {
        "RuleName": "DailyBackup",
        "TargetBackupVaultName": "Default",
        "ScheduleExpression": "cron(0 3 ? * * *)",
        "StartWindowMinutes": 60,
        "CompletionWindowMinutes": 120,
        "Lifecycle": {
          "DeleteAfterDays": 30
        }
      }
    ]
  }'

七、备份监控 #

7.1 查看备份事件 #

bash
# 查看备份相关事件
aws docdb describe-events \
  --source-type db-cluster \
  --source-identifier my-cluster \
  --start-time 2024-01-15T00:00:00Z \
  --end-time 2024-01-15T23:59:59Z

7.2 CloudWatch监控 #

text
备份相关指标:
├── BackupRetentionPeriodStorageUsed
├── SnapshotStorageUsed
├── BackupUsage
└── SnapshotUsage

7.3 备份告警 #

bash
# 创建备份失败告警
aws cloudwatch put-metric-alarm \
  --alarm-name docdb-backup-failed \
  --metric-name BackupFailed \
  --namespace AWS/DocDB \
  --statistic Sum \
  --period 300 \
  --threshold 1 \
  --comparison-operator GreaterThanOrEqualToThreshold \
  --evaluation-periods 1

八、备份最佳实践 #

8.1 备份策略 #

text
备份策略建议:
├── 自动备份保留期:7-14天
├── 定期手动快照:每周/每月
├── 重要变更前快照
├── 跨区域备份:灾难恢复
└── 定期测试恢复

8.2 命名规范 #

text
快照命名建议:
├── 包含日期:my-cluster-20240115
├── 包含类型:my-cluster-daily-20240115
├── 包含用途:my-cluster-pre-upgrade
└── 保持一致性

8.3 恢复测试 #

text
恢复测试建议:
├── 定期测试恢复流程
├── 验证数据完整性
├── 记录恢复时间
├── 更新恢复文档
└── 培训相关人员

九、实际场景 #

9.1 数据误删恢复 #

bash
# 1. 确定误删时间
# 2. 恢复到误删前
aws docdb restore-db-cluster-to-point-in-time \
  --db-cluster-identifier my-cluster-recovery \
  --source-db-cluster-identifier my-cluster \
  --restore-to-time 2024-01-15T09:30:00Z

# 3. 创建实例
aws docdb create-db-instance \
  --db-instance-identifier my-cluster-recovery-primary \
  --db-instance-class db.r6g.large \
  --engine docdb \
  --db-cluster-identifier my-cluster-recovery

# 4. 导出需要的数据
# 5. 导入到原集群
# 6. 删除恢复集群

9.2 版本升级前备份 #

bash
# 1. 创建升级前快照
aws docdb create-db-cluster-snapshot \
  --db-cluster-snapshot-identifier my-cluster-pre-upgrade-5.0 \
  --db-cluster-identifier my-cluster

# 2. 等待快照完成
aws docdb wait db-cluster-snapshot-available \
  --db-cluster-snapshot-identifier my-cluster-pre-upgrade-5.0

# 3. 执行升级
aws docdb modify-db-cluster \
  --db-cluster-identifier my-cluster \
  --engine-version 5.0.0 \
  --apply-immediately

# 4. 验证升级结果
# 5. 如有问题,从快照恢复

9.3 跨环境数据同步 #

bash
# 1. 创建生产环境快照
aws docdb create-db-cluster-snapshot \
  --db-cluster-snapshot-identifier prod-snapshot-20240115 \
  --db-cluster-identifier prod-cluster

# 2. 复制到开发区域
aws docdb copy-db-cluster-snapshot \
  --source-db-cluster-snapshot-identifier arn:aws:docdb:us-east-1:123:snapshot:prod-snapshot-20240115 \
  --target-db-cluster-snapshot-identifier prod-snapshot-20240115 \
  --source-region us-east-1 \
  --region us-west-2

# 3. 恢复到开发环境
aws docdb restore-db-cluster-from-snapshot \
  --db-cluster-identifier dev-cluster-from-prod \
  --snapshot-identifier prod-snapshot-20240115 \
  --region us-west-2

十、成本优化 #

10.1 备份成本 #

text
备份成本组成:
├── 自动备份存储
├── 快照存储
├── 跨区域复制流量
└── 数据传输费用

10.2 成本优化 #

text
成本优化建议:
├── 合理设置保留期
├── 删除不需要的快照
├── 使用生命周期策略
├── 监控备份使用量
└── 优化备份频率

十一、常见问题 #

11.1 备份失败 #

text
原因:
├── 权限不足
├── 存储空间不足
├── 网络问题
└── 系统错误

解决:
├── 检查IAM权限
├── 检查存储配额
├── 检查网络连接
└── 联系AWS支持

11.2 恢复慢 #

text
原因:
├── 数据量大
├── 实例规格小
├── 网络带宽限制
└── 存储性能

解决:
├── 使用更大规格实例
├── 优化恢复流程
├── 并行恢复
└── 监控恢复进度

十二、总结 #

12.1 备份类型对比 #

类型 自动备份 手动快照
触发方式 自动 手动
保留期 1-35天 永久
PITR 支持 不支持
跨区域 需配置 支持

12.2 最佳实践总结 #

text
备份最佳实践:
├── 启用自动备份
├── 定期手动快照
├── 测试恢复流程
├── 监控备份状态
└── 优化备份成本

下一步,让我们学习监控与告警!

最后更新:2026-03-27