我正在使用 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
我可能需要降级我的版本?否则不确定从这里去哪里......
添加
--forceTableScan
例子:
http://aug2uag.blogspot.com/2018/08/mongoexport-unrecognized-field-snapshot.html
错误来自 mongo 4.0 中引入的 mongo 快照功能(https://docs.mongodb.com/manual/reference/read-concern-snapshot/)
如果您使用较旧的 mongo 客户端 (<4.0) 转储/导出更新的 MongoDB,您将收到错误
使用“forceTableScan”将阻止快照功能变为活动状态,您不会收到错误消息
mongodump 与 mongoDB 服务器(3.6 与 4.0)之间肯定存在版本差异。
您可以使用 docker 进行救援:
使用 docker,您无需安装即可使用精确版本的工具 cli。
您甚至可以指定别名(在 .bashrc 中):
注意:保存转储的文件夹需要具有写入权限,以便容器中的 mongodb 用户可以写入已安装的卷。这可以通过在运行上述命令之前手动设置转储文件夹的权限来实现。
在上面的示例中,这将是:
mkdir -m 777 dump
. 转储完成后,可以将权限修改回正常状态(即sudo chmod 755 dump
)。我在 CentOS 中也遇到了同样的问题,其中我的 mongodb 使用用户名和密码进行了身份验证
我使用了以下命令:
并在提示时输入 mongodb 密码。
默认情况下,当扫描具有该索引的集合可用时,mongodump 使用 _id 索引(例如,视图没有任何索引)。指定--forceTableScan以指示 mongodump 在不使用 _id 索引的情况下扫描集合数据。
有关更多信息,请参阅此链接。
如果您从 Mongo Atlas 转储,这应该可以。