MongoDB 2.4.10转3.6.3恢复报错:mongorestore跳过.bson文件
解决MongoDB mongorestore跳过.bson文件的报错问题
这个报错核心是mongorestore的参数用法和备份路径指定不符合工具预期,下面给你具体的解决方案和原因分析:
为什么会出现这个错误?
--nsInclude参数用法有误:你只指定了NEWDBNAME,但--nsInclude需要匹配完整的命名空间格式(数据库名.集合名),单独的数据库名无法让工具识别要处理哪些集合文件。- 备份路径指定可能不正确:用
mongodump -d DBNAME -o /path/folder导出后,备份文件会自动存放在/path/folder/DBNAME/目录下(工具会创建原数据库名的子文件夹),如果你的命令指定的是顶层的/home/path/to/folder/,工具无法直接找到对应的集合文件。
具体解决方案
方案一:使用--nsInclude并指定正确的备份路径
如果需要将原备份导入到新数据库NEWDBNAME,执行以下命令:
mongorestore -vvvv --nsInclude "NEWDBNAME.*" /home/path/to/folder/DBNAME/
--nsInclude "NEWDBNAME.*"表示匹配NEWDBNAME数据库下的所有集合/home/path/to/folder/DBNAME/是原数据库备份文件所在的实际目录(里面包含各个.bson和.metadata.json文件)
方案二:使用命名空间映射(更直观的数据库重命名导入)
如果你想把原DBNAME数据库的所有集合直接导入为NEWDBNAME,推荐用--nsFrom和--nsTo做命名空间映射:
mongorestore -vvvv --nsFrom "DBNAME.*" --nsTo "NEWDBNAME.*" /home/path/to/folder/
这个命令会自动识别/home/path/to/folder/下的原DBNAME文件夹,将所有集合的命名空间从DBNAME.xxx替换为NEWDBNAME.xxx,完成导入。
额外检查点
- 先确认备份结构:执行
ls /home/path/to/folder/,应该能看到原数据库名称的子文件夹,进入该子文件夹能看到.bson和.metadata.json文件 - MongoDB 3.6的
mongorestore完全兼容2.4版本的备份,不需要担心版本兼容性问题
内容的提问来源于stack exchange,提问作者Meher Hosni
相关产品推荐
相关产品推荐

