未找到 Mongod.service => 从空双端队列弹出 => 身份验证失败

时间:2021-07-04 08:21:07

标签: python mongodb ubuntu pymongo



问题

我在 MongoDB 上开始使用 Python,我的 Ubuntu 中有一台 local network 机器,MongoDB 安装在那里。当我尝试使用 Python 中的 Mac 连接数据库时,它通过我出现错误。我搜索了一下,发现有一个名为 .servicemongod.service 需要与 mongodb.service 一起启动。但是当我尝试启动 mongod.service 时,它说 .service 甚至不存在。我用 IP 和 mongodb url 都试过了,没有任何效果。

Ubuntu 终端

$ sudo service mongod start
$ Failed to start mongod.service: Unit mongod.service not found.
$ sudo systemctl start mongod
$ Failed to start mongod.service: Unit mongod.service not found.



数据库链接(一)

mongodb://user:password@192.168.0.106/database

Python 脚本(一)

#!/usr/bin/env python3

from pymongo import MongoClient

client = MongoClient('mongodb://user:password@192.168.0.106/database')

db = client['database']

collection = db['collection']

json = dict(message='hello world', token=0)

collection.insert_one(json)

macOS 终端(一)

pymongo.errors.ServerSelectionTimeoutError: 192.168.0.106:27017: [Errno 61] Connection refused, Timeout: 30s, Topology Description: <TopologyDescription id: 60e140982a43032aef0dd634, topology_type: Single, servers: [<ServerDescription ('192.168.0.106', 27017) server_type: Unknown, rtt: None, error=AutoReconnect('192.168.0.106:27017: [Errno 61] Connection refused')>]>



数据库链接 (b)

mongodb+srv://user:password@cluster0.h9fmz.mongodb.net/database?retryWrites=true&w=majority

Python 脚本 (b)

#!/usr/bin/env python3

from pymongo import MongoClient

client = MongoClient('mongodb+srv://user:password@cluster0.h9fmz.mongodb.net/database?retryWrites=true&w=majority')

db = client['database']

collection = db['collection']

json = dict(message='hello world', token=0)

collection.insert_one(json)

macOS 终端 (b)

Traceback (most recent call last):
  File "/usr/local/lib/python3.9/site-packages/pymongo/pool.py", line 1278, in _get_socket
    sock_info = self.sockets.popleft()
IndexError: pop from an empty deque

During handling of the above exception, another exception occurred:
.....
.....
.....
pymongo.errors.OperationFailure: bad auth : Authentication failed., full error: {'ok': 0, 'errmsg': 'bad auth : Authentication failed.', 'code': 8000, 'codeName': 'AtlasError'}



注意

  • 我为数据库提供了正确的用户名和密码。
  • 我在本地网络上使用一台机器,它不是实时服务器。
  • 我也尝试了以下命令,但没有解决任何问题。

Ubuntu 终端

$ mongod --auth --port 27017
$ mongod --port 27017
$ sudo rm /var/lib/mongodb/mongod.lock
$ sudo mongod --repair



1 个答案:

答案 0 :(得分:3)

用于从本地网络中的另一台机器访问 mongodb。您需要检查以下内容:

  1. 服务器机器或客户端机器没有防火墙限制。如果有防火墙,您将需要添加规则例外以允许访问此端口。传入和传出。 (Ubuntu firewall)

  2. 您必须将 bindIp 配置添加到服务器机器中的 mongodb 配置中。请参阅文档 here。您需要添加如下内容:

    net:
       bindIp: 0.0.0.0
       port: 27017
    
  3. 确保您能够使用此 IP:192.168.0.106(本地网络中的服务器)从服务器计算机本身进行连接。这将确保服务器正在侦听此 ip。

$ Failed to start mongod.service: Unit mongod.service not found.

可以找到此错误的解决方案here

mongo atlas 错误可能是由于以下原因:

  1. 您必须创建一个数据库用户才能连接到 mongodb。 您可以在左侧面板下找到它 -> Database access -> Add user

  2. 这是因为用户名和密码不匹配。如果您的密码中有任何特殊字符,则必须url encode