我正在使用mongo工具中的mongodump下载我的服务器的备份。但是,当我运行该命令时,该命令返回“无法识别的字段'快照'”。

完整的错误是:

Failed: error reading collection: Failed to parse: { find: "data", skip: 0, snapshot: true, $readPreference: { mode: "secondaryPreferred" }, $db: "xxx" }. Unrecognized field 'snapshot'.


Mongodump --version返回:

mongodump version: built-without-version-string
git version: built-without-git-spec
Go version: go1.7.3
   os: linux
   arch: amd64
   compiler: gc
OpenSSL version: OpenSSL 1.0.2g  1 Mar 2016


我可能需要降级我的版本?否则不确定从何处去...

评论

您的O / S和MongoDB服务器的版本是什么?您的mongodump --version输出表明您已经从源代码构建了工具,因此尚不清楚对应的MongoDB版本。如果可能的话,我建议下载官方二进制文件。

#1 楼

当然,mongodump与mongoDB服务器之间的版本有所不同(3.6与4.0)。

您可以使用docker进行救援:

docker run --rm -v $(pwd):/workdir/ -w /workdir/ mongo:4.0 mongodump -h server -d $database --out /workdir/dump/


借助docker,您可以使用精确版本的cli工具,而无需安装它。

您甚至可以指定别名(在.bashrc中):

alias mongodump="docker run --rm -v $(pwd):/workdir/ -w /workdir/ mongo:4.0 mongodump"


注意:保存转储的文件夹将需要具有写入权限,以便容器中的mongodb用户可以写入已安装的卷。这可以通过在运行上述命令之前手动设置转储文件夹的权限来实现。

在上面的示例中为:mkdir -m 777 dump。转储完成后,可以将权限修改回普通权限(即sudo chmod 755 dump)。

评论


我不断收到错误失败:错误转储元数据:为元数据文件转储/ {COLLECTION}创建目录时出错:mkdir dump:权限被拒绝。我尝试使用-u 0和-o / tmp / dump,但无法正常工作。最后,我最终启动了一个容器,运行转储,然后将其复制到容器之外。有什么想法让我弄错了吗?

–第三者
18/12/7在9:59

您需要适当地设置uid:docker run --rm -v $ {pwd):/ workdir / -w / workdir / -u $ {id -u)mongo:4.0 mongodump ...

–ltn100
19年4月23日在9:55

#2 楼

添加--forceTableScan

示例:

mongodump --forceTableScan -d database_name -o target_directory


http://aug2uag.blogspot.com/2018/08/mongoexport-unrecognized-field-snapshot .html

评论


您能解释一下错误的含义吗?为什么这个论点有很大帮助?

– F3L1X79
19年11月22日在9:26

@ F3L1X79参见此答案上的链接

– Eido95
19/12/23在16:13

这应该是公认的答案。 Docker不是解决问题的必要条件。

– RealHandy
20-6-25在16:29

#3 楼

我在CentOS中也遇到以下规格问题,其中我的mongodb使用用户名和密码进行了身份验证



我使用了以下命令:

mongodump --forceTableScan -h <mongo database where it is hosted> -u <username>  -d <databasename>  -o /<output directory>/


并在出现提示时输入mongodb密码。

默认情况下,当扫描具有该索引的集合时,mongodump默认使用_id索引(例如,视图没有任何索引)索引)。指定--forceTableScan可以指示mongodump在不使用_id索引的情况下扫描收集数据。

有关更多信息,请参考此链接。

#4 楼

如果您从Mongo Atlas转储,则应该可以使用。
mongodump --forceTableScan --uri "mongodb+srv://username:password@clusteraaa.xxxx.mongodb.net/db_name"  --out "backup-dir"