“Host ‘X’ is not allowed to connect to this MySQL server”
含义: MySQL 客户端以这条确切的信息拒绝了连接。 发生原因: Square Cloud 的托管数据库每次连接都要求 SSL。当连接尝试在未加载证书的情况下发起时会出现此错误,而不是像信息所暗示的那样是由于防火墙/主机白名单。 如何修复:- 在 Square Cloud 控制面板中打开数据库并下载证书文件(CA、cert、key,通常有 2-3 个字段)。
- 在你客户端的 SSL/TLS 配置中加载这些文件:
- 图形界面客户端(MySQL Workbench、DBeaver、HeidiSQL):在客户端的 SSL 选项卡中配置下载的证书文件,然后使用控制面板中显示的 host/port/user/password 进行连接。
- 代码(Prisma ORM): 将客户端证书+密钥转换为
.p12:然后设置:将client.p12一并放入应用的 zip 中,并在应用的环境变量中设置DATABASE_URL,然后重启应用。
- 确认用户名和密码与控制面板中显示的一致,如果证书是刚刚生成的,请重启数据库。
MongoNetworkError 与 MongoDB Atlas IP 白名单失败
含义: 一个外部托管的 MongoDB Atlas 集群(而非 Square Cloud 托管数据库)以MongoNetworkError: connection ... closed 拒绝连接,即便凭据是正确的。
发生原因: Square Cloud 的应用容器使用每次重启都会变化的动态 IPv4 地址。为单个静态 IP 配置的 MongoDB Atlas IP 白名单在下一次重启前可以正常工作,之后就会悄悄失效。
如何修复,二选一:
- 如果需要外部 Atlas,推荐做法: 在 Atlas 的 Network Access 中添加
0.0.0.0/0以允许来自任意 IP 的连接,并通过更强的凭据(长且随机的密码、专用的数据库用户、仅保存在环境变量中的连接字符串)来弥补更宽松的白名单带来的风险。另请参阅使用动态 IP 连接 MongoDB Atlas。 - 总体推荐做法: 将数据库迁移到 Square Cloud 托管数据库,而不是使用外部 Atlas 集群。将数据库托管在应用旁边可以彻底消除 IP 白名单问题,并带来近乎零的延迟。
连接超时与 ECONNREFUSED
含义: 应用在尝试连接数据库时挂起直到超时,或立即以ECONNREFUSED 失败。
通常可以这样判断原因:
- 超时(连接挂起,没有立即被拒绝)通常意味着目标数据库上的防火墙或 IP 白名单正在阻止连接。许多外部服务商默认会屏蔽数据中心/境外 IP。
- 立即出现的 ECONNREFUSED 或 “authentication failed” 通常意味着 host/port 是可达的,但凭据、数据库名或端口号有误。
- 如果连接的是外部服务商(而非 Square Cloud 托管数据库),请在目标防火墙上放行 Square Cloud 的 ASN:
398395和26548。对于只支持基于 IP 白名单的服务商(如 MongoDB Atlas),请改用0.0.0.0/0配合强凭据,因为源 IP 是动态的。 - 仔细核对 host、port、用户名和密码,与服务商或 Square Cloud 控制面板显示的是否一致。
- 对连接字符串中的特殊字符进行 URL 编码(密码中原样保留的
@、:、/等字符会破坏解析)。 - 检查服务商的驱动是否要求在连接字符串中显式添加
ssl=true(或类似)参数。
SSL/TLS 连接错误
含义: 客户端无法与数据库建立 TLS 握手,或紧随其后出现一个看似是身份验证问题、实际上是证书问题的错误。 发生原因: Square Cloud 托管数据库要求每次连接都使用 SSL。每种数据库引擎对证书的形式要求略有不同:- Redis: 协议必须是
rediss://(两个 s),而不是redis://。形式:rediss://default:PASSWORD@HOST:PORT。node-redis也接受socket: { tls: true, ca: fs.readFileSync("certificate.pem") };Python 的redis库使用ssl_ca_certs/ssl_certfile/ssl_keyfile(从控制面板下载的合并版certificate.pem对它们都适用)。 - Drizzle ORM(Postgres): 一个标准的
pgPool,配置ssl: { ca, cert, key },均通过fs.readFileSync从合并版certificate.pem加载,并在drizzle.config.ts中使用相同的ssl对象。 - JDBC(Java): 客户端密钥必须转换为 PK8/DER 格式,并在 JDBC URL 的 SSL 属性中引用。
相关指南
- 创建并连接托管数据库:完整的设置过程,附连接示例。
- 数据库:引擎、版本以及各套餐包含的内容。
- 环境变量:把连接字符串放在代码之外。
- 帮助中心的连接问题、防火墙和 IP 封锁。

