温馨提示×

MongoDB在Ubuntu上如何进行数据备份与恢复策略

小樊
42
2025-12-06 20:02:01
栏目: 云计算

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
    • 建议将备份目录单独挂载到有足够空间的磁盘分区。

0