database - mongo 3.4到3.6升级后Mongo E11000重复密钥错误收集
问题描述
我在 Ubuntu 上有一个 Mongo 副本集,其中为我的信息系统配置了三个成员,当我尝试将 MongoDB 从版本 3.4 升级到 3.6 时遇到问题
在主节点上设置featureCompatibilityVersion
为 3.4 并在两个从节点上检查后,我开始一个一个升级从节点(我优雅地关闭了数据库db.shutdownServer()
,使用 apt 更新包并启动 mongod 服务)。一切都很顺利,奴隶们又回到了次要状态。然后我关闭了master,重复了官方指南(https://docs.mongodb.com/manual/release-notes/3.6-upgrade-replica-set/)中的所有升级步骤,并尝试启动mongod服务再次。
但是,当我升级主节点时,被选为新主节点的从节点崩溃并出现错误:
[rsSync] 致命断言 40454 DuplicateKey:E11000 重复密钥错误集合:admin.system.users 索引:user_1_db_1 dup key:{:“john”,:“admin”} 在 src/mongo/db/system_index.cpp 134
我没有注意到这一点,当旧主人再次启动时,它也因同样的错误而崩溃。在我疯狂地试图让成员重新站起来的过程中,第三名成员也被选为大师了很短的时间,然后又因同样的错误而崩溃。
当我设法让第一个成员再次成为独立成员时,我检查了system.users
集合,发现确实有两个用户在 admin 数据库中使用相同的用户名(我用...编辑了部分):
{ "_id" : ObjectId("5...8"), "user" : "john", "db" : "admin", "credentials" : { "MONGODB-CR" : "f...c" }, "roles" : [ { "role" : "read", "db" : "admin" } ] }
和
{ "_id" : "admin.john", "user" : "john", "db" : "admin", "credentials" : { "MONGODB-CR" : "f...c" }, "roles" : [ { "role" : "read", "db" : "admin" } ] }
我的问题是这怎么可能?mongo 不应该阻止某人添加相同的用户吗?还是 mongo 在升级后尝试更改该集合但失败了?如果有任何区别,我正在使用 authSchema 版本 3。谢谢!
解决方案
推荐阅读
- azure - Azure Functions 使用 JavaScript 中的 Azure 媒体服务提供 mp4 视频
- vba - 过滤数据后创建新工作簿
- django - 在进入个人资料页面时,“profile_pic”没有与之关联的文件,出现值错误
- javascript - 重新加载页面后,Service Worker 显示为已删除
- python-3.x - 无法打开链接或单击文本按钮以使用 selenium 和 python 转到网站上的 reletad 区域
- python-3.x - 使用 .setEchoMode() 后 QLineEdit 消失
- tensorflow - 由于时期数,张量流模型无法正常工作
- javascript - 如何在打字稿的单元测试中模拟课堂上的硬私有财产
- uwp - Microsoft Store App 中报告的调试内存故障
- java - 将数据从多个用户传输到一台服务器,从 Java 到 C#