认证远程服务器的mongodb,一直报以下错误:
Traceback (most recent call last):
File "run_cloudweb.py", line 109, in <module>
operMongodb.ResourceThread.init_db(etc.config.MONGO_IP,int(etc.config.MONGO_PORT),etc.config.MONGO_DB,etc.config.MONGO_USER,etc.config.MONGO_PWD)
File "/root/web/cloudweb_py3/operMongodb.py", line 281, in init_db
db.authenticate(api_key,secret_key,mechanism='SCRAM-SHA-1')
File "/usr/local/lib/python3.7/dist-packages/pymongo/database.py", line 1471, in authenticate
connect=True)
File "/usr/local/lib/python3.7/dist-packages/pymongo/mongo_client.py", line 751, in _cache_credentials
writable_preferred_server_selector)
File "/usr/local/lib/python3.7/dist-packages/pymongo/topology.py", line 231, in select_server
address))
File "/usr/local/lib/python3.7/dist-packages/pymongo/topology.py", line 189, in select_servers
selector, server_timeout, address)
File "/usr/local/lib/python3.7/dist-packages/pymongo/topology.py", line 205, in _select_servers_loop
self._error_message(selector))
pymongo.errors.ServerSelectionTimeoutError: XX.XX.XX.XX:27017: [Errno 111] Connection refused
经过各种检查发现问题如下:
1. 远程服务器/etc/mongodb.conf配置里bind_ip修改, 默认是127.0.0.1,改成 0.0.0.0。或者是加上开放的ip(例如:180.77.22.12,80.77.22.13)
bind_ip = 0.0.0.0
然后重启 service mongodb restart
2. 验证的时候加上"SCRAM-SHA-1"
from pymongo import MongoClient
#ip是mongo所在的ip, port默认是27017
con = MongoClient(ip, port)
#admin是mongo里的账号密码认证库
db = con['admin']
#mongo3.0.3以上版本,加入了SCRAM-SHA-1校验方式
db.authenticate(user, passwd, mechanism='SCRAM-SHA-1')
到这里就OK了