You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Google Cloud Run无法连接Google Cloud SQL的问题排查求助

Cloud Run连接Cloud SQL MySQL排查指南(针对Java11 Spring Boot/Grails4)

一、Cloud Run自动注入Unix套接字的机制说明

当你在Cloud Run版本配置中添加Cloud SQL连接后,Cloud Run平台会在底层与Cloud SQL的托管代理建立专用通道,自动在容器文件系统中生成路径为/cloudsql/INSTANCE_CONNECTION_NAME的Unix套接字。这个套接字是平台托管的,不需要你在Docker容器中部署cloud-sql-proxy或手动配置IAM凭证——Cloud Run会自动使用服务账号完成身份验证,你只需要确保服务账号拥有Cloud SQL Client角色即可。

二、排查步骤与解决方案

1. 确认Cloud Run基础配置正确性

  • 检查Cloud SQL连接配置:确保添加的实例连接名(PROJECT-ID:REGION:INSTANCE-ID)完全匹配Cloud SQL实例详情页的「实例连接名」,无拼写、大小写或区域错误。
  • 核对服务账号权限:Cloud Run使用的服务账号(默认是PROJECT_NUMBER-compute@developer.gserviceaccount.com)必须拥有Cloud SQL Client角色,否则无法建立连接。

2. 验证JDBC连接配置(适配Grails4+Hikari)

方式一:使用托管Unix套接字

在application.yml中配置数据源:

dataSource:
    url: jdbc:mysql:///YOUR_DB_NAME?unixSocketPath=/cloudsql/INSTANCE_CONNECTION_NAME
    driverClassName: com.mysql.cj.jdbc.Driver
    username: YOUR_DB_USER
    password: YOUR_DB_PASS
    pooled: true
    jmxExport: true
hikari:
    dataSource:
        cachePrepStmts: true
        prepStmtCacheSize: 250
        prepStmtCacheSqlLimit: 2048
    connectionTimeout: 30000
    validationTimeout: 5000

注意:JDBC串中//后留空,无需填写主机和端口,Unix套接字不需要这些信息。

方式二:使用Google Cloud SQL Socket Factory

首先在build.gradle中添加适配Java11的依赖:

implementation 'com.google.cloud.sql:mysql-socket-factory-connector-j-8:1.13.0'

然后修改数据源配置:

dataSource:
    url: jdbc:mysql:///YOUR_DB_NAME?cloudSqlInstance=INSTANCE_CONNECTION_NAME&socketFactory=com.google.cloud.sql.mysql.SocketFactory
    driverClassName: com.mysql.cj.jdbc.Driver
    username: YOUR_DB_USER
    password: YOUR_DB_PASS
    pooled: true
    jmxExport: true

注:ipTypes=PUBLIC在Cloud Run环境中通常无需添加,Socket Factory会自动适配平台网络;若Cloud SQL实例禁用公网IP,可添加ipTypes=PRIVATE。

3. 通过Cloud Run日志定位具体错误

在Google Cloud控制台的Cloud Run服务详情页进入「日志」标签,筛选数据库相关条目:

  • 若出现Access denied for user 'xxx'@'xxx':检查数据库用户名密码是否正确,或该用户是否允许Cloud Run网络访问(Cloud SQL用户默认允许所有主机,除非手动限制IP)。
  • 若出现Could not find socket path /cloudsql/xxx:核对实例连接名是否正确,或Cloud Run版本是否已配置Cloud SQL连接。
  • 若出现Connection timeout:检查Cloud SQL实例是否正常运行,或服务账号权限是否缺失。

4. 验证数据库用户权限

确保使用的是Cloud SQL实例中创建的原生数据库用户(而非IAM用户,除非已配置IAM数据库认证),且该用户拥有目标数据库的读写权限。

三、常见误区提醒

  • 不要在Docker镜像中部署cloud-sql-proxy:Cloud Run的托管连接已替代手动代理需求,手动部署会引发冲突或额外权限问题。
  • 不要混淆实例连接名与实例ID:实例连接名是项目ID:区域:实例ID的完整格式,不能只写实例ID。

内容的提问来源于stack exchange,提问作者Leon Heyna

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 18:55:11