MongoDB 备份(mongodump)与恢复(mongorestore)

MongoDB 备份(mongodump)与恢复(mongorestore)全面指南

mongodumpmongorestore 是 MongoDB 官方提供的 逻辑备份/恢复工具,适用于 迁移、备份、灾备、版本升级、数据抽取 等场景。


一、核心概念对比

工具类型格式适用场景
mongodump逻辑备份BSON / JSON迁移、部分恢复、开发测试
mongorestore逻辑恢复BSON恢复 mongodump 产生的备份
文件系统快照物理备份二进制生产级大集群、近零 RTO
mongoexport / mongoimport文本导出JSON / CSV数据分析、跨系统迁移

生产环境推荐mongodump + 文件系统快照 双保险


二、mongodump 基本语法

mongodump [options]

常用选项

选项说明
--host / -h主机(含副本集/分片)
--port端口
--uri连接字符串(推荐)
--db / -d备份指定数据库
--collection / -c备份指定集合
--out / -o输出目录(默认 dump/
--gzip压缩每个文件(强烈推荐)
--archive输出为 单个归档文件(支持流式传输)
--query / -q按条件导出(配合 --collection
--excludeCollection排除集合
--numParallelCollections并行导出集合数(默认 4)

三、常见备份场景与命令

1. 备份整个实例(所有数据库)

mongodump \
  --uri="mongodb://host1:27017,host2:27018/?replicaSet=rs0" \
  --gzip \
  --archive=/backup/full_$(date +%Y%m%d_%H%M%S).archive

输出:单个 .archive 文件,可直接管道传输到 S3 / NAS


2. 备份单个数据库

mongodump \
  --uri="mongodb://localhost:27017" \
  --db=mydb \
  --gzip \
  --out=/backup/mydb_$(date +%Y%m%d)

输出结构:

/backup/mydb_20251109/
  ├── users/
  │   ├── collection.bson.gz
  │   └── metadata.json
  └── orders/

3. 备份单个集合 + 条件过滤

mongodump \
  --uri="mongodb://localhost:27017" \
  --db=logs \
  --collection=access \
  --query='{"date": {"$gte": {"$date": "2025-11-01T00:00:00Z"}}}' \
  --gzip \
  --out=/backup/logs

4. 从分片集群备份(通过 mongos)

mongodump \
  --uri="mongodb://mongos1:27017,mongos2:27017/?readPreference=secondaryPreferred" \
  --db=analytics \
  --gzip \
  --archive \
  | aws s3 cp - s3://my-bucket/backup/analytics.archive

注意mongodump 通过 mongos 备份分片数据,会自动并行从各 shard 拉取


5. 仅备份结构(无数据)

mongodump --db=mydb --out=/backup/schema --archive --noData

四、mongorestore 恢复语法

mongorestore [options]

常用选项

选项说明
--uri目标连接
--archive恢复 .archive 文件
--gzip自动解压 .gz
--db恢复到指定数据库(可重命名)
--collection恢复到指定集合
--drop恢复前删除目标集合
--numInsertionWorkers并行插入线程(默认 1)
--objCheck验证 BSON 有效性
--dryRun预演,不实际写入

五、恢复实战案例

1. 恢复整个归档文件到新集群

mongorestore \
  --uri="mongodb://new-host:27017" \
  --archive=/backup/full_20251109_120000.archive \
  --gzip \
  --drop \
  --numInsertionWorkers=8

2. 恢复单个数据库到不同名称

mongorestore \
  --uri="mongodb://localhost:27017" \
  --nsInclude="mydb.*" \
  --nsFrom="mydb.*" \
  --nsTo="mydb_prod.*" \
  --drop \
  /backup/mydb_20251109/

mydb 恢复为 mydb_prod


3. 仅恢复集合结构(索引)

mongorestore \
  --uri="mongodb://localhost:27017" \
  --db=mydb \
  --noData \
  /backup/mydb_20251109/

4. 流式恢复(从 S3 直接恢复)

aws s3 cp s3://my-bucket/backup/full.archive - \
  | mongorestore --archive --gzip --drop

六、生产级备份策略

频率方式存储保留
每日全量mongodump --archive --gzipS3 / NAS7 天
每小时增量文件系统快照(LVM/XFS)本地磁盘24 小时
关键库实时mongodump --oplog(点-in-time)异地备份30 天

七、点-in-time 恢复(PITR)

需要 oplog 备份,实现任意时间点恢复

# 1. 备份全量 + oplog
mongodump \
  --host=rs0/localhost:27017 \
  --archive \
  --gzip \
  --oplog \
  > /backup/pitr_$(date +%Y%m%d_%H%M%S).archive

# 2. 恢复到指定时间点
mongorestore \
  --archive=/backup/pitr_20251109_030000.archive \
  --gzip \
  --oplogReplay \
  --oplogLimit="2025-11-09T04:30:00Z"

--oplogLimit 指定恢复截止时间


八、性能优化建议

场景建议
大集合(>100GB)使用 --numParallelCollections=8 + --gzip
高并发写入备份时加 --readPreference=secondary
分片集群通过 mongos 备份,避免单点压力
磁盘 IO 瓶颈备份到 /tmprsync 到 NAS

九、自动化备份脚本(Bash + Cron)

#!/bin/bash
# backup.sh

URI="mongodb://user:pass@host:27017/?replicaSet=rs0&authSource=admin"
BACKUP_DIR="/backup/mongodb"
DATE=$(date +%Y%m%d_%H%M%S)
S3_BUCKET="s3://my-mongo-backup"

# 创建目录
mkdir -p $BACKUP_DIR

# 全量备份 + oplog
mongodump \
  --uri="$URI" \
  --archive="$BACKUP_DIR/full_$DATE.archive" \
  --gzip \
  --oplog \
  --quiet

# 上传 S3
aws s3 cp "$BACKUP_DIR/full_$DATE.archive" "$S3_BUCKET/"

# 清理 7 天前备份
find $BACKUP_DIR -name "*.archive" -mtime +7 -delete
# crontab -e
0 3 * * * /path/to/backup.sh >> /var/log/mongo_backup.log 2>&1

十、常见问题排查

问题原因解决方案
connection refused连接字符串错误检查 --uri、防火墙
not authorized无权限添加 ?authSource=admin
BSON too large单文档 > 16MB拆分文档
archive read error文件损坏重新备份
恢复后索引丢失使用 --noIndexRestore移除该选项

十一、补充工具对比

工具优势劣势
mongodump灵活、支持条件导出逻辑备份,慢
Percona Backup for MongoDB支持物理备份、增量需额外部署
MongoDB Ops Manager / Atlas自动化、PITR、云存储付费
文件系统快照秒级 RTO需停写或一致性快照

十二、学习资源


你想实现什么?

  • 每日自动备份到 S3?
  • 跨集群数据迁移?
  • 生产环境 PITR 方案?
  • 备份性能优化?

欢迎提供:

  1. 集群类型(单节点/副本集/分片)
  2. 数据量(GB/TB)
  3. 备份窗口(夜间?实时?)
  4. 存储目标(本地/S3/NAS)

我可以为你定制 完整备份策略 + 自动化脚本 + 灾备演练

文章已创建 2371

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

相关文章

开始在上面输入您的搜索词,然后按回车进行搜索。按ESC取消。

返回顶部