Mongodump:无法识别的字段“快照”

Dav*_*ave 71 mongodb mongodump

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

完整的错误是:

Failed: error reading collection: Failed to parse: { find: "data", skip: 0, snapshot: true, $readPreference: { mode: "secondaryPreferred" }, $db: "xxx" }. Unrecognized field 'snapshot'.
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

我可能需要降级我的版本?否则不确定从这里去哪里......

小智 118

添加 --forceTableScan

例子:

mongodump --forceTableScan -d database_name -o target_directory
Run Code Online (Sandbox Code Playgroud)

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”将阻止快照功能变为活动状态,这不会出现错误


小智 25

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/
Run Code Online (Sandbox Code Playgroud)

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

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

alias mongodump="docker run --rm -v $(pwd):/workdir/ -w /workdir/ mongo:4.0 mongodump"
Run Code Online (Sandbox Code Playgroud)

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

在上面的例子中,这将是:mkdir -m 777 dump. 转储完成后,可以将权限修改回正常(即sudo chmod 755 dump)。

  • 您需要适当地设置 uid:`docker run --rm -v $(pwd):/workdir/ -w /workdir/ -u $(id -u) mongo:4.0 mongodump ...` (2认同)