我意外地从我的mongo db中删除了所有的数据库。然后,我尝试在新数据库中插入一个文档。它会抛出错误"Unable to persist state,因为缺少会话事务集合。这表明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
发布于 2019-01-14 07:32:44
我意外地从我的mongo db中删除了所有数据库
很可能您还丢弃了config.transactions集合。这是一个供内部使用的集合,用于存储用于支持副本集和分片群集的retryable writes的记录。另请参见Config Databases。
从MongoDB v3.6+开始,用户将无法从mongo外壳中删除副本集中的config
数据库。尽管您使用v3.6之前的mongo
shell进行连接,但仍然可以这样做,请确保将shell升级到与服务器版本相匹配。
“无法保持事务状态,因为缺少会话事务集合。这表示已手动删除config.transactions集合。”
您可以在主节点上手动重新创建集合:
use config
db.createCollection("transactions");
或者,副本集选择也会自动重新创建它。这是因为config.transactions
集合的创建是副本集节点的一部分。session_catalog_mongod.cpp#L156
在主服务器完成追赶阶段后,新的config.transactions
集合将复制到辅助服务器。
https://stackoverflow.com/questions/54104289
复制相似问题