MongoDB 备份策略制定与落地指南 CentOS
一 策略设计要点
二 方案选型与适用场景
| 方案 | 适用场景 | 关键能力 | 主要优缺点 |
|---|---|---|---|
| mongodump/mongoexport | 中小数据量、开发测试、结构迁移 | 全量/指定集合导出,支持**–gzip** | 简单易用;大数据量时慢、资源占用高 |
| 文件系统快照 + Oplog | 副本集/分片集,追求低影响 | 快照一致性 + oplog回放 | 几乎不影响业务、速度快;需快照能力 |
| Percona Backup for MongoDB(PBM) | 生产级、TB级、需增量/PITR | 全量+增量、并发、压缩、分片支持 | 功能强、学习成本略高 |
| MongoDB Atlas 备份 | 使用云托管 | 自动全量/增量、保留策略 | 托管省心;依赖云环境与成本 |
| 第三方工具(如 ClusterControl) | 需要集中化运维 | 备份+监控+恢复编排 | 功能全;需额外部署与授权 |
| 以上方案可按数据规模、停机容忍度与运维能力综合选择或组合使用。 |
三 在 CentOS 上的落地步骤
#!/usr/bin/env bash
set -Eeuo pipefail
BACKUP_ROOT="/data/backup/mongodb"
DATE=$(date +%F_%H-%M-%S)
OUT_DIR="$BACKUP_ROOT/$DATE"
LOG_FILE="$BACKUP_ROOT/backup_$DATE.log"
RETENTION_DAYS=14
# 认证(二选一):URI 或 账号密码
# MONGO_URI="mongodb://user:pass@127.0.0.1:27017"
MONGO_HOST="127.0.0.1"
MONGO_PORT="27017"
DB_USER="backup_user"
DB_PASS="StrongPass!23"
mkdir -p "$OUT_DIR"
echo "[$(date)] Start backup to $OUT_DIR" >> "$LOG_FILE"
# 全库备份(如仅备份单库,添加:-d <dbname>)
if [[ -n "${MONGO_URI:-}" ]]; then
mongodump --uri "$MONGO_URI" --out "$OUT_DIR" --gzip >> "$LOG_FILE" 2>&1
else
mongodump -h "$MONGO_HOST" -p "$MONGO_PORT" -u "$DB_USER" -p "$DB_PASS" --authenticationDatabase admin --out "$OUT_DIR" --gzip >> "$LOG_FILE" 2>&1
fi
if [[ $? -eq 0 ]]; then
echo "[$(date)] Backup succeeded." >> "$LOG_FILE"
# 可选:打包归档
# tar czf "$BACKUP_ROOT/mongodb_$DATE.tar.gz" -C "$OUT_DIR" .
# 清理过期
find "$BACKUP_ROOT" -mindepth 1 -maxdepth 1 -type d -mtime +$RETENTION_DAYS -exec rm -rf {} +
else
echo "[$(date)] Backup FAILED." >> "$LOG_FILE"
exit 1
fi
0 2 * * * /usr/bin/bash /data/backup/mongodb/backup.sh
四 恢复与验证
mongorestore --uri "mongodb://127.0.0.1:27017" --gzip /data/backup/mongodb/2025-09-01_02-00-00
mongorestore --uri "mongodb://127.0.0.1:27017" --gzip -d mydb /data/backup/mongodb/2025-09-01_02-00-00/mydb
mongorestore --uri "mongodb://127.0.0.1:27017" --dryRun /data/backup/mongodb/2025-09-01_02-00-00
五 生产增强与注意事项