咨询mongorestore使用/不使用-d参数时预期的文件与目录类型
让我帮你把mongorestore的输入逻辑理清楚,结合你的备份目录结构来拆解就好懂多了:
1. 不使用-d参数时的预期输入
当你不带-d执行命令时,mongorestore默认是要恢复整个备份集里的所有数据库,所以它期望你提供的是一个「包含多个数据库子目录的根目录」。
比如你的备份结构里,dump目录下面有mydb1、mydb2、mydb3这三个数据库的子目录,这个dump就是符合要求的根目录。这也是为什么你在mydirectory下直接执行mongorestore能成功——因为命令会自动查找当前目录下的dump子目录作为默认根目录。
你之前在mydirectory/dump下执行mongorestore mydb1报错,问题就出在这里:mongorestore把mydb1当成了要找的「备份根目录」,但打开后发现里面不是数据库子目录,而是schemas.bson这类集合文件,它不知道该怎么处理这些文件,所以就跳过了。
2. 使用-d参数时的预期输入
-d参数的作用是明确指定要恢复到的目标数据库名,这时候mongorestore的逻辑就变了:它期望你提供的是一个「单个数据库的备份目录」——也就是像mydb1、mydb2这种包含该数据库所有集合文件(.bson和.metadata.json)的目录。
举几个符合要求的例子:
- 把
mydb1恢复到同名数据库:在mydirectory/dump下执行mongorestore -d mydb1 mydb1 - 把
mydb2恢复到名为new_status_db的数据库:mongorestore -d new_status_db mydb2
你之前以为不用-d就能恢复单个数据库,其实是混淆了两种模式的输入要求——不带-d时命令只认「多数据库根目录」,不认单个数据库的目录。
快速总结
| 参数情况 | 预期输入类型 | 示例命令(基于你的目录) |
|---|---|---|
不带-d | 包含多个数据库子目录的根目录 | 在mydirectory执行 mongorestore |
带-d <目标数据库名> | 单个数据库的备份目录(含集合文件) | 在mydirectory/dump执行 mongorestore -d mydb1 mydb1 |
内容的提问来源于stack exchange,提问作者Eldy
相关产品推荐
相关产品推荐

