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