gpt4 book ai didi

python - MongoDB:无法启动副本集; 'has data already, cannot initiate set'

转载 作者:IT老高 更新时间:2023-10-28 13:10:41 25 4
gpt4 key购买 nike

我有一个 MongoDB 实例,set up using a config file and a key file .

我想initiate a replica set using pymongo .当我尝试启动副本集时,通过对将成为副本集主服务器的服务器执行 python 脚本,如下所示:

from pymongo import MongoClient

uri = "mongodb://correctWorkingUsername:password@localhost:27017"
c = MongoClient(uri)

config = {'_id': 'RelicaSetName', 'members': [
{'_id': 0, 'host': 'FirstServer:27017'},
{'_id': 1, 'host': 'SecondServer:27017'},
{'_id': 2, 'host': 'ThirdServer:27017'}]}

c.admin.command("replSetInitiate", config)

我收到一条错误消息,如下:

'SecondSErver:27017' has data already, cannot initiate set

但是,如果我使用

对数据库进行身份验证
mongo admin -u correctWorkingUsername -p password

我可以启动复制,并成功添加成员:

rs.initiate()
rs.add('SecondServer:27017')

我不确定这是否与 key 文件身份验证有关,或者用户已经由脚本在其他服务器上创建。每个服务器也都使用配置文件 mongod.conf 启动,其中包含一个副本集名称。

为什么会失败? rs.initiate() 和 rs.add() 可以完美运行,但 python 脚本无法正常工作,尽管它实际上可以连接到数据库。

最佳答案

一次初始化完整副本集时,每个节点都不应该有数据。

当您将现有的单个节点变成副本集时,其数据将成为副本集数据,然后添加额外的节点会将数据复制到它们,从而清除现有数据。

您应该做的是启动节点、初始化副本集并然后创建用户(仅在主节点上)。

the users were ALREADY created on the other servers by a script

这是核心问题 - 对未初始化的副本集成员执行此操作的唯一方法是,如果它首先作为非副本集节点启动,添加用户,然后重新启动它replSet 选项。这不是要遵循的正确顺序。正确的步骤列表check the docs .

关于python - MongoDB:无法启动副本集; 'has data already, cannot initiate set',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41152191/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com