无法坚持交易状态,因为会话事务收集失踪(Unable to persist transaction

2019-10-28 11:24发布

我不小心掉落的所有数据库从我蒙戈分贝。 然后我试图插入新的数据库中的文档。 它抛出错误“无法持续的交易状态,因为会话事务收集失踪。这表明config.transactions集合已被手动删除。”

我的示例代码:

doc_client = MongoClient(host=host,
                         port=port,
                         connect=True,  # Connect on first operation to avoid multi-threading related errors
                         j=True,  # Requests only return once write has hit the DB journal
                         )
print(doc_client.database_names()) # It works fine
doc_client['test'].insert({'a': 'ss'}) # Throws Error

Answer 1:

我不小心掉落的所有数据库从我的蒙戈分贝

很可能,你也下降config.transactions集合。 这是存储用于支持记录内部使用的集合重试写的副本集和分片集群。 另请参阅配置数据库 。

因为MongoDB的V3.6 +,用户将无法删除config的副本从设置数据库蒙戈外壳。 但如果你使用的是连接mongo外壳之前3.6版,您仍然可以这样做,请确保升级的外壳相匹配的服务器版本。

“无法持续的交易状态,因为会话事务收集失踪。这表明config.transactions集合已被手动删除。”

您可以手动重新创建主节点上的集合:

use config
db.createCollection("transactions");

另外,一个副本集的选举也将自动重新创建它。 这是因为创建config.transactions集合是一个副本集节点一步行动的一部分。 session_catalog_mongod.cpp#L156

config.transactions集合将被复制到二级后的主要完成了赶超阶段。



文章来源: Unable to persist transaction state because the session transaction collection is missing