如何恢复单文件格式的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
相关产品推荐
相关产品推荐

