MongoDB在Linux环境中的备份策略
一 策略总览与选择
二 备份方式与适用场景对比
| 方式 | 工具/机制 | 优点 | 局限 | 典型场景 |
|---|---|---|---|---|
| 逻辑备份 | mongodump(可加 –gzip) | 灵活、可按库/集合/查询导出、便于迁移与部分恢复 | 导出/导入开销较大,大数据量较慢 | 日常备份、跨版本迁移、开发/测试数据供给 |
| 物理备份 | 拷贝 dbPath(停机或快照) | 速度快、恢复快、适合大体量 | 需一致性保障,跨版本/跨平台受限 | 大库、低RTO要求、同版本恢复 |
| 实时可用性 | 副本集 从节点导出 | 不影响主节点、近实时 | 非真正备份,仍需定期落盘/快照 | 高可用架构、降低主库备份压力 |
| 第三方/云 | PBM、Atlas 备份 | PBM支持增量;Atlas一键化 | 依赖产品能力/成本 | 企业级备份、云上托管场景 |
三 自动化备份脚本与定时任务
#!/usr/bin/env bash
set -Eeuo pipefail
DUMP="/usr/bin/mongodump" # mongodump路径
OUT_DIR="/data/backup/mongo/tmp" # 临时导出目录
TAR_DIR="/data/backup/mongo/archive" # 归档目录
DATE=$(date +%Y_%m_%d_%H_%M)
DB_USER="backup_user"
DB_PASS="StrongPassw0rd!"
DAYS=15
TAR_BAK="mongodb_bak_${DATE}.tar.gz"
# 创建目录
mkdir -p "$OUT_DIR" "$TAR_DIR"
# 全库导出(可按需改为 -d 指定库)
"$DUMP" \
--host 127.0.0.1 --port 27017 \
--username "$DB_USER" --password "$DB_PASS" \
--authenticationDatabase "admin" \
--out "$OUT_DIR/$DATE" \
--gzip
# 打包归档
tar -zcvf "$TAR_DIR/$TAR_BAK" -C "$OUT_DIR" "$DATE"
# 清理临时导出
rm -rf "$OUT_DIR/$DATE"
# 清理过期归档
find "$TAR_DIR" -name "mongodb_bak_*.tar.gz" -mtime +$DAYS -delete
echo "Backup finished: $TAR_DIR/$TAR_BAK"
# 编辑当前用户crontab
crontab -e
# 每天02:00执行,标准输出/错误重定向到日志
0 2 * * * /usr/bin/bash /data/script/mongo_backup.sh >>/var/log/mongo_backup.log 2>&1
四 恢复流程与关键参数
mongorestore --host 127.0.0.1 --port 27017 --dir /data/backup/mongo/archive/mongodb_bak_2025_04_01_02_00mongorestore --host 127.0.0.1 --port 27017 -d mydb --dir /data/backup/mongo/archive/mongodb_bak_2025_04_01_02_00/mydbsudo systemctl stop mongodsudo rsync -a /path/to/backup/mongodb/ /var/lib/mongodb/sudo systemctl start mongod五 企业级增强与注意事项