Ubuntu 22.04下Python连接MongoDB Atlas遇DNS查询不存在错误求助
解决Ubuntu 22.04中Python连接MongoDB Atlas的DNS解析错误
我帮你分析下问题的核心,然后一步步解决这个DNS错误:
从你给出的错误日志和DNS查询结果来看,最直接的问题是代码里的MongoDB连接字符串域名不完整,导致DNS找不到对应的SRV记录。我们来逐个排查修复:
1. 修正连接字符串的核心问题
你代码里的连接字符串是:
CONNECTION_STRING = “mongodb+srv://projegui:@clusterak.mongodb.net/myFirstDatabase”
这里有两个致命问题:
- 密码缺失:
projegui:@里@前面是空的,必须替换成你MongoDB Atlas数据库用户的真实密码 - 域名不完整:从你执行的
nslookup/host命令能看到,正确的集群域名是clusterak.mp9ylv1.mongodb.net,但你代码里只写了clusterak.mongodb.net,少了后缀mp9ylv1,这直接导致DNS查询_mongodb._tcp.clusterak.mongodb.net时返回不存在。
解决方法:直接从MongoDB Atlas控制台复制正确的连接字符串:
- 登录Atlas控制台,进入你的集群页面
- 点击「Connect」→「Connect your application」
- 选择Python驱动,复制生成的完整连接字符串(记得替换
<password>为你的真实密码)
修正后的代码示例:
from pymongo import MongoClient def get_database(): # 替换为从Atlas复制的正确连接字符串,务必替换<your-password>为真实密码 CONNECTION_STRING = "mongodb+srv://projegui:your_actual_password@clusterak.mp9ylv1.mongodb.net/myFirstDatabase?retryWrites=true&w=majority" client = MongoClient(CONNECTION_STRING) return client['myFirstDatabase'] if __name__ == "__main__": try: dbname = get_database() print("MongoDB Atlas连接成功!") # 可以加个简单的测试,比如列出集合 print("数据库中的集合:", dbname.list_collection_names()) except Exception as e: print(f"连接失败:{e}")
2. 确保依赖包版本正确
mongodb+srv://格式的连接需要dnspython来解析SRV记录,旧版本的pymongo或dnspython可能存在兼容性问题,执行以下命令升级依赖:
pip install --upgrade pymongo dnspython
3. 验证DNS解析(可选)
从你给出的host命令结果来看,_mongodb._tcp.clusterak.mp9ylv1.mongodb.net是可以正常解析的,所以只要连接字符串正确,这一步应该没问题。如果还是遇到DNS问题,可以临时切换DNS服务器到Google的公共DNS测试:
# 临时修改DNS(重启系统后会恢复) echo "nameserver 8.8.8.8" | sudo tee /etc/resolv.conf
4. 检查Atlas IP白名单(后续验证)
如果DNS问题解决后还是连接失败,要检查你的Ubuntu机器公网IP是否在MongoDB Atlas的IP白名单里:
- 进入Atlas控制台的「Network Access」页面
- 添加你的机器公网IP,或者暂时设置为
0.0.0.0/0(允许所有IP,测试用,生产环境不要这么做)
按照上面的步骤修改后,应该就能正常连接MongoDB Atlas了。
内容的提问来源于stack exchange,提问作者SrKartcheski
相关产品推荐
相关产品推荐

