MongoDB Atlas 国内连不上怎么办:querySrv 报错、连接超时、IP 白名单与集群地区选择全解
MongoDB Atlas 是 MongoDB 官方的云数据库服务,几分钟就能建好一个托管集群,免费档足够做个人项目、课程作业和原型验证,很多全栈教程默认就用它。国内开发者最常遇到的报错有这几种:程序启动就抛出 querySrv ENOTFOUND 或 querySrv ETIMEOUT;等待三十秒后报 MongoServerSelectionError,提示服务器选择超时;连接建立了却提示认证失败;Atlas 控制台网页本身打开很慢,创建集群时卡在加载。
这些报错分别卡在不同环节。以 mongodb+srv 开头的连接串,驱动要先查询域名的 SRV 与 TXT 记录才能拿到真正的节点地址,本地域名解析不支持或超时就会报 querySrv 错误;服务器选择超时通常是你的出口地址不在 Atlas 的 IP 访问列表里,或者访问数据库端口的连接被拦截;认证失败则是数据库用户与密码的问题,与网络无关。下面先讲集群地区与连接方式的选择,再分步配置。免费档额度与付费价格以官方最新条款为准。
集群地区与连接方式的差异
集群地区一旦创建就不能随意更换,免费档更是只能删除重建,所以创建前要想清楚应用的用户在哪里。应用服务器和数据库最好放在同一个云厂商、同一个地区,跨地区访问每次查询都要多出几十到上百毫秒。国内本地开发时连接海外集群慢一点可以接受,生产环境要尽量让应用与数据库同地区部署。
| 对比项 | 中国香港或新加坡 | 日本东京 | 美国或欧洲 |
|---|---|---|---|
| 到国内的延迟 | 通常最低 | 较低 | 较高 |
| 免费档可选 | 视云厂商而定 | 视云厂商而定 | 可选地区最多 |
| 适合场景 | 面向国内用户的应用 | 面向东亚用户 | 面向欧美用户 |
| SRV 连接串 | 依赖域名解析 | 依赖域名解析 | 依赖域名解析 |
| 标准连接串 | 直接列出节点地址 | 直接列出节点地址 | 直接列出节点地址 |
| 私有网络连接 | 付费档支持 | 付费档支持 | 付费档支持 |
从建集群到连上:分步操作步骤
- 第一步:先把网络线路准备好。Atlas 控制台与集群都在境外,先连上刺猬VPN,再打开控制台网页;注册只需自定义用户名和密码,不需要邮箱和手机号,免费节点永久免费、不限流量,注册即用。注意线路出口地址就是 Atlas 看到的访问来源,后面加访问列表时要用它;
- 第二步:注册并登录 Atlas。可以用邮箱注册,也可以用 Google 或 GitHub 账号登录,建议开启多因素认证;
- 第三步:创建集群。选择免费档,云厂商与地区按上一节的建议选择,集群名称以后不能改,取一个有意义的名字;
- 第四步:创建数据库用户。在「Database Access」页面新建用户,设置用户名与强密码,权限按需选择读写,密码里尽量避免需要转义的特殊字符;
- 第五步:配置 IP 访问列表。在「Network Access」页面添加当前出口地址,页面上有一键添加当前地址的按钮;出口地址经常变化时,可以临时添加多个地址,不要长期使用允许所有地址的设置;
- 第六步:获取连接串。在集群页面点击「Connect」,选择驱动与版本,复制以 mongodb+srv 开头的连接串,把其中的密码占位符替换为实际密码;
- 第七步:本地测试。先用 MongoDB Compass 或命令行工具 mongosh 连接,确认能看到数据库列表,再把连接串写进应用的环境变量,不要硬编码进代码仓库;
- 第八步:querySrv 报错时改用标准连接串。在连接页面选择较旧的驱动版本,就能拿到直接列出三个节点地址的连接串,它不依赖 SRV 查询,可以绕开本地域名解析的问题。
按现象排查:解析、访问列表与认证
排查时看报错的类型名,基本就能判断卡在哪一关。下面按最常见的现象逐条对照。
- querySrv ENOTFOUND 或 ETIMEOUT:本地域名解析无法查询 SRV 记录,换用可靠的公共域名解析服务,或改用标准连接串;
- MongoServerSelectionError 并提示超时:出口地址不在访问列表里,到「Network Access」页面添加当前出口地址后等一两分钟生效;
- 开着线路能连、关掉后连不上:访问列表里只有线路出口地址,本地宽带的出口地址也要加入,或在需要时统一走线路;
- 认证失败提示 bad auth:用户名或密码错误,密码里有特殊字符时要做网址编码,或者在控制台重置一个只含字母数字的密码;
- 公司网络下始终超时:公司防火墙拦截了数据库端口,这类出站端口限制需要走加密线路或者向网络管理员申请放行;
- 控制台网页加载很慢:境外页面资源加载慢,确认线路已连上,换一个延迟更低的节点;
- 免费集群一段时间没用后连不上:免费档在长期无活动后可能被暂停,在控制台里手动恢复。
线路出口与访问列表的配合
Atlas 的访问列表是按地址放行的,而开发者的出口地址经常在变:家里宽带每次重新拨号可能换地址,切换线路节点时出口地址也会变。最省心的做法是固定使用一个节点做数据库开发,把这个节点的出口地址加入访问列表;需要切换时,在控制台里一键添加新的当前地址即可。临时添加的地址可以设置过期时间,到期自动删除,避免列表越积越长。
智能分流在这里也有用:只让 Atlas 相关的域名走线路,其他流量照常直连,这样访问列表里只需要维护线路出口这一类地址。至于生产环境,不要依赖开发者的出口地址,应该把应用服务器的固定地址加入访问列表,或者在付费档使用私有网络连接,让数据库完全不暴露在公网上。
驱动与连接池的常见配置问题
很多连接问题不在网络,而在驱动配置。最常见的是驱动版本过旧:老版本驱动不支持 SRV 连接串或新的认证机制,连接时会报出看似网络相关的错误,升级到与集群版本匹配的驱动后就消失了。其次是超时设置:默认的服务器选择超时是三十秒,跨境访问时可以适当调长,但不要调得过长,否则真正连不上时要等很久才看到报错。
无服务器函数与集群配合时,要特别注意连接数:每次函数调用都新建连接,很快就会撞上免费档的连接数上限,报出连接被拒绝。正确做法是把客户端实例放在函数外部复用,并把连接池上限调小。本地开发时则要注意热重载框架反复创建客户端,同样会导致连接数堆积,开发模式下用全局变量缓存客户端即可。
连接串里的数据库名、读写偏好和重试参数也会影响行为:没写数据库名时默认连到测试库,数据写进去了却在控制台的目标库里找不到,是新手最常见的困惑之一。把参数写清楚,再配合控制台的实时指标页面观察连接数与操作延迟,问题就很容易定位。
线路方案对比
数据库查询本身流量不大,但一次页面请求可能触发多次查询,延迟会被放大。学习和原型开发用免费节点即可;每天开发与调试,固定一个会员节点并把出口地址加入访问列表,管理起来最省事。实际可用性取决于当前网络环境。
| 对比项 | 免费节点 | 会员节点 | 不连线路 |
|---|---|---|---|
| 控制台访问 | 多数情况可用 | 加载更快 | 常加载缓慢 |
| 数据库连接 | 可用,需加出口地址 | 延迟更低、更稳定 | 视网络与端口限制 |
| 出口地址变化 | 切换节点时会变 | 固定节点更易管理 | 随宽带变化 |
| 流量规则 | 永久免费、不限流量、不限速 | 时长套餐有效期内不限流量、不限速 | 不涉及 |
| 分流方式 | 按域名或 IP 智能分流 | 按域名或 IP 智能分流 | 不涉及 |
| 适合场景 | 学习与原型开发 | 每天开发与调试 | 不适用 |
和其他云数据库的分工
如果你的数据更适合关系型结构,或者需要分支式的开发数据库,可以看看无服务器的 Postgres 与 MySQL 方案,连接与地区选择的差异见 Neon 与 PlanetScale 云数据库指南;需要认证、存储与实时同步一体化的后端服务,Supabase 与 Firebase 的访问与配置见 Supabase 与 Firebase 访问指南。
选型时可以这样考虑:文档结构多变、需要灵活字段的用 Atlas;表关系明确、需要事务与连接查询的用 Postgres 系;想把认证、存储、数据库一站式解决的用后端即服务平台。几种方案在国内访问时的问题相似,都要处理好地区选择与访问来源。
常见报错速查表
| 现象 | 原因 | 解决办法 |
|---|---|---|
| querySrv ENOTFOUND | 本地解析不支持 SRV | 换解析服务或用标准连接串 |
| 服务器选择超时 | 出口地址未加入访问列表 | 添加当前出口地址 |
| bad auth 认证失败 | 用户名或密码错误 | 重置密码或做网址编码 |
| 公司网络始终超时 | 数据库端口被拦截 | 走加密线路或申请放行 |
| 控制台加载慢 | 境外资源加载慢 | 换低延迟节点 |
| 免费集群连不上 | 长期无活动被暂停 | 在控制台手动恢复 |
高频问答
- 问:Atlas 有中国大陆地区的集群吗?答:可选地区以控制台显示为准,国内用户通常选中国香港、新加坡或东京;
- 问:可以把访问列表设成允许所有地址吗?答:技术上可以,但等于把数据库暴露给全网,只建议临时测试;
- 问:标准连接串和 SRV 连接串有什么区别?答:前者直接写节点地址,后者靠域名查询节点,功能相同;
- 问:免费档能用于生产吗?答:存储与性能有限,适合学习与原型,生产建议用付费档并配置私有网络;
- 问:为什么换了节点就连不上?答:出口地址变了,需要把新地址加入访问列表;
- 问:付费档怎么付款?答:按 Atlas 控制台支持的付款方式绑定,价格以官方最新条款为准。
让 Atlas 连接稳定下来
MongoDB Atlas 国内连不上,按解析、访问列表、认证三关排查:querySrv 报错换解析或改标准连接串,服务器选择超时就把出口地址加进访问列表,认证失败重置密码。集群地区选在离用户近的地方,开发时固定一个节点并开启智能分流,大部分连接问题都不会再出现。
刺猬VPN 采用 HTTPS+AES 加密传输,自定义用户名和密码即可匿名注册;免费节点永久免费、不限流量、不限速,适合学习与原型开发;时长套餐有效期内不限流量、不限速,适合每天开发调试;客户端支持断线保护与按域名或 IP 的智能分流。Atlas 的额度与价格以官方最新条款为准,实际可用性取决于当前网络环境。
换刺猬VPN告别连接烦恼:一键连接、连接稳定
刺猬VPN提供永久免费节点,不限流量;无需邮箱,自定义用户名即可匿名注册。一个账号支持多设备同时在线,实际可用性取决于当前网络环境。