Ubuntu 上 MongoDB 备份策略实操指南
一 策略选型与规划
- 备份类型
- 逻辑备份:使用 mongodump/mongorestore,跨版本/跨平台迁移友好,适合大多数场景。
- 物理备份:直接拷贝 /var/lib/mongodb 数据文件,速度快、适合大库,但要求版本一致、停机一致性要求高。
- 频率与保留
- 建议:每日全量 + 每周全量归档;本地保留 7–30 天,异地/云上保留 ≥90 天。
- 一致性
- 备份尽量安排在业务低峰;对高写入库,优先使用 副本集 并在备份时连接 隐藏/从节点,降低对主节点影响。
- 存储与成本
- 启用压缩(gzip/tar.gz)与定期清理;重要备份可同步到对象存储或离线介质。
- 安全
- 备份文件包含敏感数据,建议 加密 与 最小权限访问;凭据使用凭据文件或密钥管理,避免硬编码。
- 目标指标
- 结合业务设定 RPO/RTO:例如 RPO≤24 小时、RTO≤4 小时,并定期演练验证。
二 快速落地 每日全量备份脚本
- 安装工具(若未安装)
- Ubuntu 20.04/22.04 常见包名:mongodb-database-tools(包含 mongodump/mongorestore)
- 命令:sudo apt update && sudo apt install -y mongodb-database-tools
- 备份脚本 /usr/local/bin/mongodb_backup.sh
#!/usr/bin/env bash
set -Eeuo pipefail
BACKUP_ROOT="/var/backups/mongodb"
DATE=$(date +"%Y%m%d_%H%M%S")
OUT_DIR="$BACKUP_ROOT/$DATE"
LOG_FILE="$BACKUP_ROOT/backup.log"
RETENTION_DAYS=7
MONGO_URI="mongodb://backup_user:YourStrongPass@localhost:27017/admin"
mkdir -p "$OUT_DIR"
exec >>"$LOG_FILE" 2>&1
echo "[$(date)] 开始备份 -> $OUT_DIR"
mongodump --uri "$MONGO_URI" --out "$OUT_DIR"
ARCHIVE="$BACKUP_ROOT/mongodb_$DATE.tar.gz"
tar -czf "$ARCHIVE" -C "$BACKUP_ROOT" "$DATE"
if tar -tzf "$ARCHIVE" >/dev/null 2>&1; then
echo "[$(date)] 备份校验通过: $ARCHIVE"
rm -rf "$OUT_DIR"
else
echo "[$(date)] 备份校验失败: $ARCHIVE"
exit 1
fi
find "$BACKUP_ROOT" -name "mongodb_*.tar.gz" -mtime +$RETENTION_DAYS -delete
echo "[$(date)] 清理 $RETENTION_DAYS 天前备份完成"
- 赋权与首次测试
- chmod +x /usr/local/bin/mongodb_backup.sh
- /usr/local/bin/mongodb_backup.sh
- 定时任务(root 用户)
- sudo crontab -e
- 示例:每天 02:00 执行
- 0 2 * * * /usr/local/bin/mongodb_backup.sh
- 说明
- 如需备份到远程主机,可在脚本中 rsync/云 SDK 上传 $ARCHIVE;如需更细粒度保留,可改为按周/月目录归档。
三 时间点恢复与增量思路
- 前提条件
- 仅 副本集/分片集群 支持时间点恢复;需在备份节点开启 oplog。
- 全量 + oplog 备份思路
- 步骤
- 定期执行全量 mongodump(建议连接从节点)。
- 在同一节点执行 mongodump 导出 oplog:
- mongodump --uri “mongodb://backup_user:pass@localhost:27017/local” --collection oplog.rs --out /backup/oplog_$DATE
- 恢复时先全量恢复,再用 oplog 回放到目标时间点:
- mongorestore --uri “mongodb://…” /backup/full_20250401_0200
- mongorestore --uri “mongodb://…” --oplogReplay /backup/oplog_20250401_0200
- 适用场景
- 误删集合/文档、按业务时间点回滚;RPO 可显著缩短(取决于 oplog 保留窗口)。
四 物理备份与恢复
- 适用场景
- 大库、停机窗口可接受、同版本恢复;追求极速恢复与一致性。
- 备份步骤
- 建议停机或使用文件系统快照;示例:
- sudo systemctl stop mongod
- sudo rsync -aAX --info=progress2 /var/lib/mongodb /backup/mongodb_phys_$DATE
- sudo systemctl start mongod
- 恢复步骤
- 建议同版本恢复;示例:
- sudo systemctl stop mongod
- sudo rsync -aAX --info=progress2 /backup/mongodb_phys_$DATE/ /var/lib/mongodb
- sudo chown -R mongodb:mongodb /var/lib/mongodb
- sudo systemctl start mongod
- 注意
- 物理备份对 MongoDB 版本/存储引擎 敏感;跨版本/跨引擎恢复风险高,务必先演练。
五 验证 监控与常见坑
- 验证
- 定期抽样恢复(如每周一次)到测试库,校验集合数、索引、数据量、关键业务查询;保留校验记录。
- 监控与告警
- 监控项:备份脚本退出码、备份文件大小异常、磁盘空间、最近一次成功时间;失败即告警(邮件/企业微信/钉钉)。
- 常见坑与规避
- 认证失败:使用 –authenticationDatabase admin,凭据正确且具备 backup/restore 角色。
- 备份影响线上:连接 隐藏/从节点 或在低峰期执行;必要时限速(nice/ionice/cgroups)。
- 时区与命名:统一 UTC 或服务器本地时区;cron 中日期格式需转义 %(如 %m-%d-%y)。
- 大对象/GridFS:mongodump 可备份,但恢复时注意可用内存与超时;必要时分片/分批恢复。
- 保留策略:务必配置 find … -mtime +N -delete,避免磁盘被占满导致后续备份失败。