【问题标题】:Fix for Mongo RetryableWrites through deployment update rather than explicitly passed option?通过部署更新而不是显式传递选项修复 Mongodb 可重试写入?
【发布时间】:2020-04-09 06:52:22
【问题描述】:

This MongoDB deployment does not support retryable writes 的最佳解决方案是什么?是否有我应该使用的版本/设置(例如,找到一种从 MMAPv1 切换到 WiredTiger 的方法),或者 retryWrites=false 的显式设置更新真的是 heroku mlab 部署的最佳解决方案?

背景

在过去几周的某个时间点,我的 Heroku 提供的 mLab 插件已经平稳运行了大约一年,任何写入尝试都开始抛出:

Exception: This MongoDB deployment does not support retryable writes. Please add retryWrites=false to your connection string.

我没有对部署或我的驱动程序进行任何更改,因此我认为这个新异常与 mlab 端的更新与我自己的设置不兼容有关。

在诸如How to fix retryWrites in Mongo? 之类的讨论中,我遇到了对该问题的有效修复。修复要求将 retryWrites=false 选项传递给 MongoClient,但在我看来,虽然我可以绕过错误,但我的 MongoDB 部署中不受支持的功能的问题并没有真正得到解决。

【问题讨论】:

  • 您的 MongoDB 驱动程序和服务器版本是什么?根据描述,您的 MongoDB 部署可能仍在使用 MMAPv1。

标签: mongodb heroku pymongo mlab storage-engines


【解决方案1】:

可重试写入在已针对 MongoDB 4.2 更新的官方驱动程序中为 enabled by default

所有现代版本的 MongoDB 服务器(我包括 MongoDB 3.6+,因为 3.4 将在下个月终止)还默认包括可重试写入支持。

错误消息表明您的服务器部署或配置较旧,不支持可重试写入。

要解决这个问题,您的选择是:

  • 使用 WiredTiger 将您的服务器和存储引擎升级到 MongoDB 3.6+。您还需要一个副本集部署(可以是用于开发/测试目的的单个成员副本集)。
  • retryWrites=false 添加到您的驱动程序连接字符串中。
  • 降级到较旧的驱动程序版本(例如,兼容 4.0)。

我建议升级您的 MongoDB 部署,特别是如果您仍在使用已弃用的 MMAPv1 存储引擎或 EOL 服务器版本。

【讨论】:

    猜你喜欢
    • 2021-02-06
    • 2011-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-19
    • 1970-01-01
    • 2014-11-28
    相关资源
    最近更新 更多