使用MongoDB Compass连接MongoDB Atlas报querySrv ENODATA错误如何解决
报错信息:
[failed] task Error: querySrv ENODATA _mongodb._tcp.cluster0.yqxra.gcp.mongodb.net
该错误本质是本地DNS无法解析MongoDB Atlas集群的SRV连接记录,和IP白名单配置无关,按以下步骤排查解决:
第一步:验证DNS解析是否正常
先通过命令确认当前网络的DNS是否能正常拉取SRV记录:
- Windows系统打开cmd执行:
nslookup -type=SRV _mongodb._tcp.cluster0.yqxra.gcp.mongodb.net - macOS/Linux系统打开终端执行:
dig SRV _mongodb._tcp.cluster0.yqxra.gcp.mongodb.net
如果执行后没有返回有效SRV记录,即可确认是当前网络的DNS服务器解析问题。
第二步:对应解决方案
方案1:更换公共DNS服务器
修改本地网络的DNS配置为以下公共DNS:
- 谷歌公共DNS:8.8.8.8、8.8.4.4
- 国内公共DNS:114.114.114.114、223.5.5.5
修改完成后刷新DNS缓存:
- Windows执行:
ipconfig /flushdns - macOS执行:
sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder - Linux执行:
sudo systemctl restart nscd或者sudo systemctl restart systemd-resolved
方案2:改用标准连接字符串替代SRV连接字符串
如果DNS修改后仍无效,可以在Atlas控制台获取非SRV格式的标准连接字符串:
- 进入Atlas集群详情页,点击「Connect」
- 选择对应连接工具(Compass/Node.js)
- 连接方式选择「I don't have my driver installed / I am using an older driver version」
- 复制生成的不带+srv后缀的标准连接字符串,替换原有连接地址即可
Node.js的标准连接字符串格式参考:mongodb://<用户名>:<密码>@cluster0-shard-00-00.yqxra.gcp.mongodb.net:27017,cluster0-shard-00-01.yqxra.gcp.mongodb.net:27017,cluster0-shard-00-02.yqxra.gcp.mongodb.net:27017/?ssl=true&replicaSet=atlas-xxxxx-shard-0&authSource=admin&retryWrites=true&w=majority
方案3:验证网络运营商限制
部分运营商会屏蔽SRV记录查询,可切换手机热点网络测试连接,如果热点可以正常连接,联系运营商反馈DNS解析问题即可。
额外验证项
确认连接字符串中的用户名、密码填写正确,特殊字符需要做URL编码,避免解析错误。
内容的提问来源于stack exchange,提问作者story ks

