CentOS 上 MongoDB 备份配置策略
一 策略总览与保留建议
二 自动化备份脚本与定时任务
#!/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
crontab -e0 2 * * * /usr/bin/bash /path/to/backup_mongodb.sh >> /var/log/mongodb_backup.log 2>&1mongorestore --uri "mongodb://127.0.0.1:27017" --gzip "$OUT_DIR"mongorestore --uri "mongodb://127.0.0.1:27017" --gzip --archive="$OUT_DIR/archive.gz"三 副本集时间点备份与增量恢复
mongodump --host <rs-host> --port 27017 --username <u> --password <p> --authenticationDatabase admin --oplog -o /backup/full_$(date +%F_%T)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:SSmongorestore --oplogReplay /backup/oplog_YYYY-MM-DD_HH:MM:SS/oplog.bson四 备份验证与运维要点
五 方法对比与选型建议
| 方法 | 适用场景 | 优点 | 局限 |
|---|---|---|---|
| mongodump | 中小规模、灵活恢复 | 易用、按库/集合导出、支持 –gzip | 大库性能较低、恢复较慢 |
| mongoexport | 导出 JSON/CSV 供外部系统使用 | 格式通用、便于数据交换 | 非整库恢复、类型信息有限 |
| 文件系统快照(LVM/ZFS/EBS) | 大库、快速恢复 | 备份/恢复快、一致性好 | 依赖底层存储、操作需谨慎 |
| Atlas 备份 | 云上托管 | 自动全量/增量、控制台一键恢复 | 云环境限定、成本因素 |
| Percona Backup for MongoDB | 企业级备份 | 支持全量+增量、生态完善 | 需额外部署与学习成本 |