Cloud SQL 实例需启用公网IP并添加本地公网IP至授权网络,Navicat连接时禁用SSL,使用显式创建的非root用户,建库时选utf8mb4字符集及utf8mb4_unicode_ci排序规则。
Google Cloud SQL 实例必须开启公网IP且放行本地IP
cloud sql 默认不分配公网ip,必须在创建实例时勾选“public ip”,或在已有实例的“连接”→“ip 地址”页手动启用。启用后,ipv4 地址才可见——这个地址就是 navicat 中要填的 host。
仅开启公网IP还不够:Cloud SQL 的防火墙默认拒绝所有入站连接。你得去“连接”→“授权网络”,点击“添加网络”,填入你当前设备的真实公网 IPv4 地址(不是内网 192.168.x.x 或 10.x.x.x)。查法很简单:curl http://ipv4.whatismyv6.com 或直接搜“我的IP”。别填错,填错就连不上,且错误提示极不明确(常显示 Connection refused 或超时)。
常见疏漏:
- 用手机热点或公司网络时,IP 会变,需重新查、重新加
- 部分宽带运营商分配的是 NAT 共享公网IP,此时需联系 ISP 或改用 Cloud SQL 的私有服务(如 VPC Service Controls),不能走公网直连
- 填了
0.0.0.0/0虽能连上,但严重违反最小权限原则,生产环境禁止
Navicat 连接设置里必须关掉 SSL(除非你真配了证书)
Google Cloud SQL MySQL 实例默认启用 SSL,但它的 CA 证书不兼容 Navicat 的常规 SSL 模式。如果你在 Navicat 的连接设置里勾了 Use SSL,又没指定正确的 ca.pem,大概率报错 SSL connection error: protocol version mismatch 或静默失败。
实际做法是:保持 Navicat 连接配置中 Security 标签页的 Use SSL **不勾选**。Cloud SQL 控制台里虽然显示“SSL is enabled”,但它只强制服务器端启用加密协商,并不要求客户端校验证书——也就是说,Navicat 明文连过去,流量仍会被 Google 后端自动加密(TLS 由 Cloud SQL 网关层终结),你无需、也不该在客户端侧干预。
只有当你明确需要双向证书校验(比如合规审计硬性要求),才需导出 Cloud SQL 提供的 server-ca.pem 和 client-cert.pem + client-key.pem,并在 Navicat 中选择 SSL Mode = Verify-Full,同时填入三个文件路径。但这一步极容易因路径权限、密钥格式(PKCS#8 vs PKCS#1)、CN 匹配失败而卡住,日常开发完全没必要。
用户名密码必须是 Cloud SQL 里显式创建的数据库用户
Cloud SQL 不允许用 root 远程登录。你必须进实例的“用户”页,点击“创建用户”,填一个非保留名(比如 app_user),设强密码。这个用户才是 Navicat 中 Username 和 Password 的来源。
注意两个坑:
- 创建用户时,“主机”字段留空或填
%即可,不用写你的本地IP(那是防火墙干的事,不是用户权限控制) - 如果之前用过
gcloud sql users create命令创建过用户,确认它是否绑定了正确的实例和主机范围;命令行创建的用户有时默认绑定到localhost,导致远程不可见 - 密码含特殊字符(如
@、/、:)时,Navicat 可能解析失败;建议暂时避开,或 URL 编码(但 Navicat 不支持自动解码,慎用)
连上后第一次建库要留意字符集与排序规则
Cloud SQL 默认字符集是 utf8mb4,但 Navicat 新建数据库时下拉菜单里可能默认显示 utf8(即旧版三字节 UTF-8)。选错会导致后续存 emoji 或四字节 Unicode 报错 Incorrect string value。
正确操作:新建数据库时,在“字符集”下拉框中手动选 utf8mb4,排序规则选 utf8mb4_unicode_ci(比 _general_ci 更准,且兼容性好)。这个设定不能靠后期 ALTER DATABASE 修改彻底,最好一开始设对。
另外,Cloud SQL 的 max_allowed_packet 默认是 64MB,但 Navicat 导入大 SQL 文件时可能触发超限。如果导入中途断开并报 Packets larger than max_allowed_packet are not allowed,就得去 Cloud SQL 实例的“数据库标志”里临时加一条:max_allowed_packet=268435456(256MB),保存后重启实例生效。


















