从AWS自建MongoDB迁移至Atlas后出现pymongo ServerSelectionTimeoutError报错
故障排查与解决方案
核心问题:代码初始化逻辑不兼容MongoDB SRV连接模式
你原先适配自建MongoDB的初始化代码是将连接地址和端口分开传参,但Atlas的mongodb+srv开头的SRV连接串本身已经内置了所有集群节点地址、端口、连接参数信息,单独传入端口会覆盖SRV的解析结果,导致连接失败。
修复代码示例
# 直接传入完整SRV连接串即可,无需额外指定端口 MONGODB_URL = os.environ.get('MONGODB_URL', 'localhost') # 移除单独的PORT参数传入 client = MongoClient(MONGODB_URL)
其他可能的故障排查点
- 检查pymongo依赖是否完整:使用SRV连接需要额外安装
dnspython依赖,执行以下命令安装全量依赖:pip install pymongo[srv] - 检查连接字符串正确性:
- 确认用户名、密码中的特殊字符(如
@/://)已做URL编码 - 确认数据库名、连接参数无拼写错误
- 确认用户名、密码中的特殊字符(如
- 网络连通性验证:
登录ECS实例执行以下命令验证网络可达:- 域名解析验证:
nslookup mongodb-prod.zzl18.mongodb.net,确认能正常解析到IP地址 - 端口连通性验证:
nc -zv mongodb-prod-shard-00-00.zzl18.mongodb.net 27017,依次测试所有分片节点的27017端口连通性 - 检查ECS所在安全组的出方向规则是否放开27017端口访问,VPC路由表、VPC对等连接配置是否正常生效
- 域名解析验证:
内容的提问来源于stack exchange,提问作者MaxxABillion
相关产品推荐
相关产品推荐

