使用 mongorestore 导入到 CosmosDB MongoDB API 失败并出现可重试写入错误
Importing to CosmosDB MongoDB API using mongorestore fails with retryable writes error
我正在尝试使用 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 support but https://docs.microsoft.com/en-us/azure/cosmos-db/mongodb-feature-support-36 表示 cosmosdb 不支持会话。
CosmosDB 宣传支持它未实现的功能,然后工具(正确地)尝试使用它。这是 cosmosdb 中的错误。
我发现各种 mongotools(mongoimport、mongorestore 等)似乎忽略了 URI 中的 retrywrites=false
或 retryWrites=false
,但是添加选项 --writeConcern="{w:0}"
允许命令 运行 在不支持可重试写入的实例上成功
在 Windows 上,没有成功附加到连接字符串(如果从 Azure 门户复制则不需要)
retryableWrite=false
也不--writeConcern w:0
切换
但我最终尝试了所有以前的档案和 mongo tools 100.0.0 的神奇组合在 CosmosDB 上与 MongoServer v3.6 一起工作。
注意:请注意这可能会导致您恢复的集合中的数据丢失。使用不同版本的 mongorestore 对其进行了多次测试。使用版本 4.0.27 的 mongoserver 存档中的版本。在此版本中,您根本不需要提供 writeConcern。它还将显示恢复了多少文档,而不是较新版本中的 0。
这会影响 API v4.0 的 CosmosDb。
我正在尝试使用 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 support but https://docs.microsoft.com/en-us/azure/cosmos-db/mongodb-feature-support-36 表示 cosmosdb 不支持会话。
CosmosDB 宣传支持它未实现的功能,然后工具(正确地)尝试使用它。这是 cosmosdb 中的错误。
我发现各种 mongotools(mongoimport、mongorestore 等)似乎忽略了 URI 中的 retrywrites=false
或 retryWrites=false
,但是添加选项 --writeConcern="{w:0}"
允许命令 运行 在不支持可重试写入的实例上成功
在 Windows 上,没有成功附加到连接字符串(如果从 Azure 门户复制则不需要)
retryableWrite=false
也不--writeConcern w:0
切换
但我最终尝试了所有以前的档案和 mongo tools 100.0.0 的神奇组合在 CosmosDB 上与 MongoServer v3.6 一起工作。
注意:请注意这可能会导致您恢复的集合中的数据丢失。使用不同版本的 mongorestore 对其进行了多次测试。使用版本 4.0.27 的 mongoserver 存档中的版本。在此版本中,您根本不需要提供 writeConcern。它还将显示恢复了多少文档,而不是较新版本中的 0。
这会影响 API v4.0 的 CosmosDb。