尝试在pymongo中启动副本集时出现身份验证错误

时间:2013-10-18 19:47:12

标签: python mongodb pymongo

尝试从python脚本启动mongodb副本集,并通过身份验证遇到错误。

from pymongo import MongoClient

ip = 'zzz.zz.zzz.zz'
port = 27017
replica_set = 'yomama'

config = {
  '_id': replica_set,
  'members': [
    {'host': 'xxx.xx.xxx.xx',
     '_id': 0,
     'arbiterOnly': False},
    {'host': 'yyy.yy.yyy.yy',
     '_id': 1,
     'arbiterOnly': False},
    {'host': 'zzz.zz.zzz.zz',
     '_id': 2,
     'arbiterOnly': False},
  ],
}

connection = MongoClient(ip, port)
connection.admin.command('replSetInitiate', config)

运行此脚本会导致:

pymongo.errors.OperationFailure: command SON([('replSetInitiate', {'_id': 'yomama', 'members': [{'host': 'xxx.xx.xxx.xx', '_id': 0, 'arbiterOnly': False}, {'host': 'yyy.yy.yyy.yy', '_id': 1, 'arbiterOnly': False}, {'host': 'zzz.zz.zzz.zz', '_id': 2, 'arbiterOnly': False}]})])
failed: unauthorized

数据库上没有设置身份验证,并且从mongo shell运行相同的东西工作正常:

db.runCommand({replSetInitiate:{'_id': 'yomama', 'members': [{'host': 'xxx.xx.xxx.xx', '_id': 0, 'arbiterOnly': false}, {'host': 'yyy.yy.yyy.yy', '_id': 1, 'arbiterOnly': false}, {'host': 'zzz.zz.zzz.zz', '_id': 2, 'arbiterOnly': false}]}})
{
    "info" : "Config now saved locally.  Should come online in about a minute.",
    "ok" : 1
}

在与pymongo做同样事情时,为什么会出现这种错误?

1 个答案:

答案 0 :(得分:0)

想出来。发生这种情况是因为通过在初始化MongoClient(connection = MongoClient(ip, port))时指定ip和port,客户端没有使用localhost exception绕过身份验证。使用localhost初始化可以解决问题,例如connection = MongoClient()

相关问题