You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何恢复单文件格式的mongodump备份数据?

解决mongodump归档文件恢复0文档的问题

你通过mongodump --archive命令备份了MongoDB Atlas集群的数据库,得到单文件归档,但使用mongorestore恢复时能识别集合名称却始终恢复0文档,以下是针对性的解决步骤:

1. 先确认归档文件的内容

首先用mongodump的--list参数查看归档里的所有命名空间,确认备份的数据库和集合是否存在数据:

mongodump --archive="mongodump-prod-db" --list

输出会类似:

DB_NAME.collection1
DB_NAME.collection2

如果没有任何集合输出,说明备份文件本身为空;如果有集合,记录原数据库名称(比如DB_NAME)。

2. 正确的恢复命令示例

恢复到本地MongoDB(保持原数据库名)

mongorestore --archive="mongodump-prod-db" --uri="mongodb://localhost:27017/" --verbose

这个命令会直接将归档中的DB_NAME数据库完整恢复到本地实例。

恢复到本地并重命名数据库

如果需要将原DB_NAME恢复为新的数据库名(比如restoreddb),使用命名空间映射参数:

mongorestore --archive="mongodump-prod-db" --uri="mongodb://localhost:27017/" --nsFrom="DB_NAME.*" --nsTo="restoreddb.*" --verbose

注意:--nsFrom中的原数据库名称必须和备份时完全一致(包括大小写,MongoDB在区分大小写的文件系统上对库名大小写敏感)。

恢复到MongoDB Atlas云端集群

指定Atlas的连接字符串,配合命名空间映射:

mongorestore --archive="mongodump-prod-db" --uri='mongodb+srv://XXXX:XXXXXXXXX@cluster0.fklgt.mongodb.net/' --nsFrom="DB_NAME.*" --nsTo="NEW_DB_NAME.*" --verbose

确保连接字符串中的用户拥有目标集群的readWrite和dbAdmin权限,否则会因权限不足导致无法写入文档。

3. 排查0文档恢复的常见原因

  • 命名空间映射错误:如果--nsFrom的原数据库名称写错,会导致没有匹配到任何集合,从而恢复0文档。务必用--list命令确认原库名。
  • 备份文件为空:用bsondump直接查看某个集合的内容,验证备份是否有效:
    bsondump --archive="mongodump-prod-db" --collection=collection1
    
    如果输出为空,说明备份时可能没有正确导出数据(比如当时数据库无数据,或--forceTableScan在分片集群上未扫描到数据)。
  • 权限不足:恢复目标的MongoDB用户没有写入权限,--verbose日志中会出现权限相关的错误提示,需要调整用户权限。
  • 版本不兼容:mongodump和mongorestore的版本差异过大(比如跨大版本)会导致兼容性问题,尽量使用相同版本的工具进行备份和恢复。

内容的提问来源于stack exchange,提问作者Ahmed Ghrib

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 13:35:54