mongodump 不能直接增量备份 GridFS bucket,因其仅支持按集合导出,而 fs.chunks 无时间戳、无事务边界,fs.files 的 uploadDate 不反映更新;真正可靠的增量需依赖 oplog + --oplog 选项。

mongodump 本身不支持对 GridFS bucket 做“增量备份”意义上的按文件变更粒度备份——它只能按集合(fs.files 和 fs.chunks)导出,而无法识别哪些 chunk 文档是“新增/修改/删除”的。所谓“GridFS 增量备份”,实际依赖的是 oplog + 时间点快照配合,不是 mongodump 的原生能力。
为什么 mongodump 不能直接增量备份 GridFS bucket
mongodump 是逻辑导出工具,它读取集合数据并序列化为 BSON;GridFS 文件由 fs.files(元数据)和 fs.chunks(分块数据)共同组成,但:
- fs.chunks 中的文档没有显式的时间戳字段(如 uploadDate 或 modifiedAt);
- 单个大文件上传会写入多条 fs.chunks 文档,且无事务边界,无法通过查询条件精确圈定“本次新增的 chunks”;
- fs.files 的 uploadDate 字段只标记文件创建时间,不反映后续更新(GridFS 不支持原地更新文件,重传即新文件)。
因此,你无法用 --query 精确筛选“过去 1 小时内上传的 GridFS 文件”并只 dump 它们——除非你在应用层主动记录文件 ID 和时间,并在 fs.files 中添加自定义索引和字段。
可行的“类增量”方案:基于 uploadDate 过滤 fs.files + 关联 chunks
如果你在上传时未篡改 uploadDate,且能接受“以文件为单位”的增量(即:只要文件是新上传的,就认为其所有 chunks 都是新的),可手动构造查询:
- 先查出目标 bucket(例如
myCustomBucket)中最近 N 分钟创建的文件 ID:db.myCustomBucket.files.find({ uploadDate: { $gt: ISODate("2026-09-07T18:00:00Z") } }, { _id: 1 }) - 再用这些
_id导出对应fs.files和fs.chunks:mongodump --db mydb --collection myCustomBucket.files --query '{"uploadDate": {"$gt": {"$date": "2026-09-07T18:00:00Z"}}}' --out /backup/gridfs_inc/</code><br><code>mongodump --db mydb --collection myCustomBucket.chunks --query '{"files_id": {"$in": ["ObjectId(\"...\")", "..."]}}' --out /backup/gridfs_inc/ - 注意:
myCustomBucket.files和myCustomBucket.chunks是真实集合名(前缀即 bucket 名),不是默认的fs.*;若用默认 bucket,则是fs.files和fs.chunks
真正可靠的增量方式:oplog + mongodump --oplog
这是 MongoDB 官方推荐的增量基础,适用于整个副本集,也覆盖 GridFS 操作:
- 必须在副本集上运行,且开启
--oplog:mongodump --host rs0/localhost:27017 --oplog --out /backup/oplog_inc/
- 该命令会:
– 备份当前全量数据(含所有 GridFS 集合);
– 同时把备份开始时刻的 oplog 位置记入oplog.bson; - 后续可用
mongorestore --oplogReplay回放 oplog,把备份后发生的 GridFS 写操作(insert intofs.files/fs.chunks)补上; - 关键限制:
– oplog 大小有限(默认 5% 磁盘空间),需确保它能覆盖两次备份间隔;
– 无法跳过非 GridFS 操作,回放是全库级别的;
–mongorestore --oplogReplay要求目标库是空的或已用相同mongodump --oplog初始化过。
真正要实现“只备份 GridFS 变更”,得放弃 mongodump,改用持续监听 oplog(如用 change streams 监听 fs.files 插入)+ 自定义归档逻辑——这已超出工具范畴,属于应用层数据同步了。别指望一条 mongodump 命令搞定。


















