温馨提示×

如何配置Ubuntu上的MongoDB备份策略

小樊
33
2025-12-12 19:35:18
栏目: 云计算

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

# 认证(如无认证可删除 --username/--password/--authenticationDatabase)
MONGO_URI="mongodb://backup_user:YourStrongPass@localhost:27017/admin"

# 目录与日志
mkdir -p "$OUT_DIR"
exec >>"$LOG_FILE" 2>&1

echo "[$(date)] 开始备份 -> $OUT_DIR"

# 执行备份(如仅备份单库:--db your_db)
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 备份思路
    • 步骤
      1. 定期执行全量 mongodump(建议连接从节点)。
      2. 在同一节点执行 mongodump 导出 oplog
        • mongodump --uri “mongodb://backup_user:pass@localhost:27017/local” --collection oplog.rs --out /backup/oplog_$DATE
      3. 恢复时先全量恢复,再用 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,避免磁盘被占满导致后续备份失败。

0