MongoDB:无法初始化副本集;'已经有数据,无法初始化集'

2024-10-01 11:19:55 发布

您现在位置:Python中文网/ 问答频道 /正文

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

我想initiate a replica set using pymongo。当我试图启动replcia集时,通过对将成为主副本集的服务器执行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)

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

^{pr2}$

但是,如果我使用

mongo admin -u correctWorkingUsername -p password

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

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

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

为什么会失败?这个rs.启动()和印度卢比()工作得很好,但是python脚本不能正常工作,尽管它可以直接连接到数据库。在


Tags: 服务器脚本idconfighost副本urifile
1条回答
网友
1楼 · 发布于 2024-10-01 11:19:55

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

当您将现有的单个节点转换为副本集时,其数据将成为副本集数据,然后添加其他节点会将数据复制到这些节点,从而清除其现有数据。在

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

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

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

相关问题 更多 >