使用mongorestore导入CosmosDB MongoDB API失败,并发生可重试的写入错误

问题描述

我正在尝试使用mongodump和mongorestore使用MongoDB API将数据从旧的MongoDB数据库服务器导出和导入到Azure CosmosDB。但是我与CosmosDB的连接存在问题。我正在使用带有URI标志的连接字符串。

我的mongorestore命令(包括连接字符串)如下:

mongorestore --uri="mongodb://$COSMOS_USERNAME:$COSMOS_PASSWORD@$COSMOS_HOST:$COSMOS_PORT/?maxIdleTimeMS=120000&retrywrites=false&appName=@$DB_NAME@&replicaset=globaldb&ssl=true" --archive="$ARCHIVE_NAME"

该命令的错误消息是:

error restoring from archive 'testProdExport.archive': (BadValue) Retryable writes are not supported. Please disable retryable writes by specifying "retrywrites=false" in the connection string or an equivalent driver specific config.

正如您在连接字符串中看到的那样,我包括retrywrites = false URI参数,但看起来CosmosDB无法识别该参数。

有人有类似的经历吗?

//编辑:我已经尝试并验证了连接字符串在Mongoose连接以及MongoDB Compass中均有效。

解决方法

您可以尝试MongoDB 3.4随附的mongorestore版本。不过,这可能无法读取最近的转储。

您提供的ismaster输出包括:

logicalSessionTimeoutMinutes:30

advertises session supporthttps://docs.microsoft.com/en-us/azure/cosmos-db/mongodb-feature-support-36说cosmosdb不支持会话。

CosmosDB宣传其未实现的功能的支持,然后该工具(正确)尝试使用它。这是cosmosdb中的错误。

,

我发现各种mongotools(mongoimport,mongorestore等)似乎都忽略了URI中的retrywrites=falseretryWrites=false,但是附加选项--writeConcern="{w:0}"可以使命令在不支持可重试写入的实例上成功运行

,

在 Windows 上,没有成功附加连接字符串(如果从 Azure 门户复制则不需要)

retryableWrite=false

也不是 --writeConcern w:0 开关 但我最终尝试了所有以前的档案,mongo tools 100.0.0 的神奇组合在 CosmosDB 和 MongoServer v3.6 上工作。