我有一个MongoDB实例,set up using a config file and a key file。我想initiate a replica set using pymongo。当我尝试启动replcia集,通过执行对服务器的Python脚本,这将成为副本集小学,因为这样的:MongoDB:无法启动副本集; '已有数据,无法启动设置'
from pymongo import MongoClient
uri = "mongodb://correctWorkingUsername:[email protected]: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')
我不确定这是与密钥文件身份验证有关,还是用户已经通过脚本在其他服务器上创建的事实。每个服务器也已经启动了一个配置文件mongod.conf,其中包含一个副本集名称。
这是为什么会失败? rs.initiate()和rs.add()完美地工作,但python脚本不起作用,尽管它可以连接到数据库。
鉴于我无法找到这个特定问题的'解决方案',我决定使用shell脚本直接执行mongodb副本启动。基本上我使用一个shell脚本来完成他们遍历的步骤。 https://api.mongodb.com/python/current/examples/high_availability.html –
你是否对副本集的所有成员运行这个相同的python脚本?如果是这种情况,那就是你的问题。 – helmy
@helmy不,我只对RS的主要版本运行脚本。为了清晰起见编辑了这个问题。 –