温馨提示×

CentOS系统MongoDB备份配置策略

小樊
44
2025-11-17 19:49:44
栏目: 云计算

CentOS 上 MongoDB 备份配置策略

一 策略总览与保留建议

  • 备份方式选型
    • 逻辑备份:使用 mongodump(支持按库/集合导出,适合中小型数据量与灵活恢复)。
    • 导出工具:使用 mongoexport(导出为 JSON/CSV,便于与外部系统交互,非整库恢复场景)。
    • 物理/快照:使用 文件系统快照(LVM/ZFS) 或云盘快照(如 EBS),适合大库与快速恢复。
    • 托管服务:使用 MongoDB Atlas 的自动备份(云上环境优先)。
  • 副本集增量能力
    • 在副本集环境使用 –oplog 做时间点备份(Point-in-Time Recovery,PITR),单实例不支持 oplog。
  • 建议的保留与频率(可按业务 RPO/RTO 调整)
    • 每日全量保留 7 天;每周全量保留 4 周;每月全量保留 12 个月
    • 增量/oplog 保留覆盖最近 24–72 小时,确保可回滚到任意时间点。

二 自动化备份脚本与定时任务

  • 安全与凭据建议
    • 避免在脚本中硬编码密码,优先使用 MongoDB Connection StringX.509 证书;如必须使用账号密码,限制脚本权限并设 0600
  • 示例脚本(全量 + 压缩 + 保留 14 天)
#!/usr/bin/env bash
set -Eeuo pipefail

# 配置
BACKUP_ROOT="/backups/mongodb"
DATE=$(date +%Y%m%d_%H%M%S)
OUT_DIR="$BACKUP_ROOT/full_$DATE"
RETENTION_DAYS=14

# 创建目录
mkdir -p "$OUT_DIR"

# 执行备份(可按需添加 --uri、--gzip、--oplog 等)
mongodump \
  --uri "mongodb://backup_user:backup_pass@127.0.0.1:27017/admin?authSource=admin" \
  --out "$OUT_DIR" \
  --gzip

# 校验并清理
if compgen -G "$OUT_DIR/*.bson.gz" > /dev/null; then
  echo "Backup succeeded: $OUT_DIR"
  # 清理过期
  find "$BACKUP_ROOT" -mindepth 1 -maxdepth 1 -type d -mtime +$RETENTION_DAYS -exec rm -rf {} +
else
  echo "Backup failed: no .bson.gz found in $OUT_DIR" >&2
  exit 1
fi
  • 定时任务(每天 02:00 执行)
    • 建议使用 root 的 crontab:crontab -e
    • 添加:0 2 * * * /usr/bin/bash /path/to/backup_mongodb.sh >> /var/log/mongodb_backup.log 2>&1
  • 恢复示例
    • 目录恢复:mongorestore --uri "mongodb://127.0.0.1:27017" --gzip "$OUT_DIR"
    • 归档恢复:mongorestore --uri "mongodb://127.0.0.1:27017" --gzip --archive="$OUT_DIR/archive.gz"

三 副本集时间点备份与增量恢复

  • 全量备份(在副本集任一 SECONDARY 节点执行,减少对业务影响)
    • mongodump --host <rs-host> --port 27017 --username <u> --password <p> --authenticationDatabase admin --oplog -o /backup/full_$(date +%F_%T)
    • 备份完成后从 oplog.bson 中读取全量结束时间戳(例如 Timestamp(1593309601,1))。
  • 增量备份(基于 oplog 时间窗口)
    • mongodump --host <rs-host> --port 27017 --username <u> --password <p> --authenticationDatabase admin \ -d local -c oplog.rs --query '{ts:{$gt:Timestamp(1593309601,1)}}' -o /backup/oplog_$(date +%F_%T)
  • 时间点恢复流程
    • 先恢复全量:mongorestore --drop /backup/full_YYYY-MM-DD_HH:MM:SS
    • 再重放增量:mongorestore --oplogReplay /backup/oplog_YYYY-MM-DD_HH:MM:SS/oplog.bson
  • 重要限制
    • 单实例不支持 --oplog;如需 PITR,请使用副本集或分片集群的 oplog。

四 备份验证与运维要点

  • 定期验证
    • 抽样恢复至临时库并执行查询校验;或使用 mongorestore --dryRun 做恢复演练(仅校验,不写入)。
  • 存储与带宽
    • 预估容量增长并监控磁盘使用;在业务低峰期执行备份;对跨机房/云传输启用压缩与限速。
  • 安全与合规
    • 备份文件加密存储;限制备份目录与日志权限;凭据与证书轮换;对敏感数据脱敏后再导出(如用 mongoexport 到 JSON/CSV)。
  • 监控与告警
    • 监控备份任务退出码、备份大小与耗时、磁盘空间;失败时即时告警并保留失败日志。

五 方法对比与选型建议

方法 适用场景 优点 局限
mongodump 中小规模、灵活恢复 易用、按库/集合导出、支持 –gzip 大库性能较低、恢复较慢
mongoexport 导出 JSON/CSV 供外部系统使用 格式通用、便于数据交换 非整库恢复、类型信息有限
文件系统快照(LVM/ZFS/EBS) 大库、快速恢复 备份/恢复快、一致性好 依赖底层存储、操作需谨慎
Atlas 备份 云上托管 自动全量/增量、控制台一键恢复 云环境限定、成本因素
Percona Backup for MongoDB 企业级备份 支持全量+增量、生态完善 需额外部署与学习成本

0