Google Cloud Run实例无法连接Google Cloud SQL数据库求助
Cloud Run 上的 .NET 6 API 无法连接 Google Cloud SQL MySQL 实例
问题描述
我在 Google Cloud Run 部署了 .NET 6 API 实例,但无法连接关联的 Cloud SQL MySQL 数据库。以下是连接字符串构建及 DbContext 配置代码:
连接字符串构建代码
public static MySqlConnectionStringBuilder ConectionStringBuilder() { var connectionString = new MySqlConnectionStringBuilder() { SslMode = MySqlSslMode.None, Server = "/cloudsql/proyect:region:instance", UserID = "user", Password = "password", Database = "dataBase", ConnectionProtocol = MySqlConnectionProtocol.UnixSocket }; connectionString.Pooling = true; return connectionString; }
DbContext 配置代码
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { optionsBuilder.LogTo(Console.Write); optionsBuilder.EnableSensitiveDataLogging(); if (!optionsBuilder.IsConfigured) { MySqlConnectionStringBuilder conn = ConectionStringBuilder(); optionsBuilder.UseMySQL(conn.ConnectionString); } }
已在 Cloud Run 实例中关联目标 Cloud SQL 数据库,尝试过更换不同实例、跨/同项目部署,问题仍未解决,需排查故障原因。
排查步骤
1. 连接字符串配置校验
- Socket 路径准确性:确认
Server字段的/cloudsql/proyect:region:instance与 Cloud SQL 实例的连接名称完全匹配(可在实例详情页「连接」标签查看),注意项目ID、区域、实例名的拼写和大小写。 - SSL 模式修正:Cloud SQL 默认强制要求 SSL 连接,将
SslMode改为MySqlSslMode.Required或MySqlSslMode.VerifyCA,禁止设置为None。 - 连接协议确认:使用 Unix Socket 时,
ConnectionProtocol = MySqlConnectionProtocol.UnixSocket配置正确,无需额外指定端口。
2. Cloud Run 与 Cloud SQL 关联配置检查
- 服务账号权限:确保 Cloud Run 实例使用的服务账号(默认是
[项目ID]@appspot.gserviceaccount.com)拥有Cloud SQL Client角色(roles/cloudsql.client),该角色允许通过 Unix Socket 访问 Cloud SQL。 - 关联实例正确性:在 Cloud Run 服务的「连接」配置中,确认已正确添加目标 Cloud SQL 实例,且实例处于运行中状态。
- VPC 连接器验证(若使用):若配置了 VPC 连接器,需确保其关联到 Cloud SQL 所在的 VPC 网络,且网络规则允许 Cloud Run 访问 Cloud SQL 私有 IP。
3. 依赖包兼容性检查
- EF Core MySQL 驱动版本:确认使用的
Pomelo.EntityFrameworkCore.MySql或MySql.EntityFrameworkCore版本与 .NET 6 兼容,建议使用 Pomelo 6.x 系列等稳定版本。 - MySQL 客户端版本:检查
MySqlConnector包版本,确保与驱动版本匹配,避免版本不兼容导致的连接失败。
4. 日志与错误分析
- 查看 Cloud Run 实例的 Cloud Logging 日志,提取连接失败的具体错误信息(如权限拒绝、Socket 不存在、认证失败等),日志会提供明确的故障指向。
- 利用代码中已启用的
EnableSensitiveDataLogging()和LogTo(Console.Write),输出完整连接字符串及连接过程日志,排查参数配置错误。
5. 数据库端配置检查
- 用户权限验证:确认 Cloud SQL 中的
user账号拥有dataBase数据库的访问权限,且用户主机配置为%(允许所有来源,包括 Cloud Run 的 Socket 连接),未被限制为特定 IP。 - 实例状态确认:确保 Cloud SQL 实例处于运行中,无暂停或维护状态。
内容的提问来源于stack exchange,提问作者Fercho Caxaj
相关产品推荐
相关产品推荐

