MongoDB 在 Ubuntu 的备份与恢复策略
一 策略总览
- 备份类型
- 逻辑备份:使用 mongodump 导出为 BSON,保留数据类型与索引元数据,便于跨版本迁移与选择性恢复,适合大多数场景。
- 物理备份:直接拷贝 /var/lib/mongodb 数据文件,要求一致性(通常需停库或借助文件系统快照),恢复速度快,适合大库与严格 RTO 场景。
- 频率与保留
- 全量:建议每日一次(低峰时段),保留 7–30 天。
- 增量/时间点:在副本集启用 oplog,可实现到秒级恢复(见第四部分)。
- 存储与异地
- 备份落盘后做压缩并同步到 远程/对象存储(如 rsync/S3),避免单点故障。
- 验证与演练
- 定期做恢复演练与校验(抽样集合校验、文档计数对比、重要业务查询回放),确保可用。
- 关键指标
- RPO(恢复点目标):两次备份间允许丢失的数据量/时间,由全量+增量频率决定。
- RTO(恢复时间目标):从故障到恢复可用的时间,由恢复手段与演练成熟度决定。
二 快速上手 逻辑备份与定时清理
- 安装工具(若未安装)
- Ubuntu 常见包名为 mongodb-tools,包含 mongodump/mongorestore。
- 全量与单库备份
- 全库:mongodump --out /var/backups/mongobackups/$(date +‘%Y%m%d_%H%M%S’)
- 单库:mongodump --db your_db --out /var/backups/mongobackups/$(date +‘%Y%m%d_%H%M%S’)
- 压缩归档
- tar -czvf /var/backups/mongobackups/backup_$(date +‘%Y%m%d_%H%M%S’).tar.gz -C /var/backups/mongobackups/$(date +‘%Y%m%d_%H%M%S’) .
- 定时任务(cron)
- 示例:每日 03:00 全量备份
- 0 3 * * * /usr/bin/mongodump --out /var/backups/mongobackups/$(date +‘%Y%m%d_%H%M%S’)
- 示例:每日 02:01 清理 7 天前 备份
- 1 2 * * * find /var/backups/mongobackups/ -mtime +7 -exec rm -rf {} ;
- 说明
- cron 中 % 需转义为 %;备份目录建议单独挂载、容量充足。
三 恢复操作与常见场景
- 全量恢复(逻辑备份)
- mongorestore /var/backups/mongobackups/2025-12-06_030000/
- 指定库/集合恢复
- mongorestore --db your_db /var/backups/mongobackups/2025-12-06_030000/your_db
- mongorestore --db your_db --collection your_coll /var/backups/mongobackups/2025-12-06_030000/your_db/your_coll.bson
- 覆盖式恢复(先删后导)
- mongorestore --db your_db --drop /var/backups/mongobackups/2025-12-06_030000/your_db
- 选择性恢复(命名空间包含)
- mongorestore --nsInclude=‘your_db.*’ /var/backups/mongobackups/2025-12-06_030000/
- 物理恢复(重装系统/迁移主机)
- 安装同版本 MongoDB → 停库 → 备份原 /var/lib/mongodb → 拷回 → 启动 → 校验
- 注意文件权限与 SELinux/AppArmor 上下文、WiredTiger 配置一致性。
四 时间点恢复与复制集实践
- 前提条件
- 部署 副本集 并开启 oplog(用于记录变更,支持回放到指定时间点)。
- 备份步骤
- 在 Secondary 节点执行 mongodump,连接时指定 –oplog 以获取备份期间的变更:
- mongodump --host rs0/secondary_host:27017 --oplog --out /backup/2025-12-06_030000
- 恢复步骤
- 恢复到同版本/兼容版本的实例后,使用 –oplogReplay 回放至故障前时刻:
- mongorestore --oplogReplay /backup/2025-12-06_030000
- 适用场景
- 误删集合/文档、错误更新后,恢复到误操作前的精确时间点。
五 自动化脚本与运维要点
- 示例备份脚本(含压缩与保留)
- 见下述“可复制脚本”,实现按日备份、自动压缩、保留 7 天。
- 校验与演练
- 例行抽样恢复、集合计数与重要查询验证;将恢复演练纳入变更管理流程。
- 安全与合规
- 备份文件属敏感数据:加密、最小权限访问、传输与落盘均校验完整性(如 sha256sum)。
- 监控与告警
- 备份成功率、备份耗时、磁盘使用率、恢复演练结果纳入监控与 SLA 告警。
- 高可用建议
- 生产环境优先使用 副本集;关键业务结合 异地备份 与定期 时间点恢复演练,降低 RPO/RTO 风险。
可复制脚本
- 备份脚本 /usr/local/bin/mongo_backup.sh
- #!/usr/bin/env bash
set -Eeuo pipefail
BACKUP_ROOT=“/var/backups/mongobackups”
DATE=$(date +“%Y%m%d_%H%M%S”)
OUT_DIR=“$BACKUP_ROOT/$DATE”
mkdir -p “$OUT_DIR”
/usr/bin/mongodump --out “$OUT_DIR”
tar -czvf “$OUT_DIR.tar.gz” -C “$OUT_DIR” .
find “$BACKUP_ROOT” -maxdepth 1 -type d -mtime +7 -exec rm -rf {} ;
- Crontab(root)
- 0 3 * * * /usr/local/bin/mongo_backup.sh >> /var/log/mongo_backup.log 2>&1
- 1 2 * * * find /var/backups/mongobackups/ -mtime +7 -exec rm -rf {} ;
- 权限
- chmod +x /usr/local/bin/mongo_backup.sh
- 建议将备份目录单独挂载到有足够空间的磁盘分区。