我有一個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的主要版本運行腳本。爲了清晰起見編輯了這個問題。 –