从外部应用连接到 Cloud SQL

本页面介绍了如何从在 Google Cloud 外部运行的应用连接到 Cloud SQL。

数据库连接会消耗服务器和连接应用上的资源。请始终采用最佳连接管理做法,以最大限度减少应用的占用空间,并降低超出 Cloud SQL 连接限制的可能性。 如需了解详情,请参阅管理数据库连接

准备工作

授予对一个应用的访问权限不会自动允许数据库用户帐号连接到该实例。 您必须首先具备可用于连接的数据库用户帐号,之后才能连接到实例。对于新实例,这就表示您必须已配置好默认用户帐号。了解详情

连接选项

下表比较了从外部应用连接到 Cloud SQL 实例的选项:

连接选项 是否有安全加密? 了解详情 备注
使用 SSL 的公共 IP 地址 需要 SSL 证书管理服务。
不使用 SSL 的公共 IP 地址 不适用于生产实例。
Cloud SQL 代理
Cloud SQL 代理 Docker 映像
JDBC 套接字库 仅限 Java 编程语言。
Go 代理库 仅限 Go 编程语言。
Cloud Shell 使用 Cloud SQL 代理从 Google Cloud Console 建立连接。最适合用于需要 sqlcmd 命令行工具的管理任务。
Apps 脚本 Apps 脚本可以通过 JDBC 服务(标准 Java 数据库连接技术的一种封装容器)连接到外部数据库。

使用代理从外部应用建立连接

如果您是为本地测试环境(而非生产环境)设置 Cloud SQL 代理,则可以参照代理快速入门操作,而不必遵循本页面中的说明操作。

如果您使用的是 Java 或 Go 编程语言,则除了使用 Cloud SQL 代理,还有几种备选方法。了解详情

1.启用 API

启用 Cloud SQL Admin API。

启用 API

2. 在本地计算机上安装代理客户端

Linux 64 位

  1. 下载该代理:
    wget https://dl.google.com/cloudsql/cloud_sql_proxy.linux.amd64 -O cloud_sql_proxy
    
  2. 使该代理可以执行:
    chmod +x cloud_sql_proxy
    

Linux 32 位

  1. 下载该代理:
    wget https://dl.google.com/cloudsql/cloud_sql_proxy.linux.386 -O cloud_sql_proxy
    
  2. 使该代理可以执行:
    chmod +x cloud_sql_proxy
    

macOS 64 位

  1. 下载该代理:
    curl -o cloud_sql_proxy https://dl.google.com/cloudsql/cloud_sql_proxy.darwin.amd64
    
  2. 使该代理可以执行:
    chmod +x cloud_sql_proxy
    

macOS 32 位

  1. 下载该代理:
    curl -o cloud_sql_proxy https://dl.google.com/cloudsql/cloud_sql_proxy.darwin.386
    
  2. 使该代理可以执行:
    chmod +x cloud_sql_proxy
    

Windows 64 位

右键点击 https://dl.google.com/cloudsql/cloud_sql_proxy_x64.exe,然后选择链接另存为以下载该代理。将文件重命名为 cloud_sql_proxy.exe

Windows 32 位

右键点击 https://dl.google.com/cloudsql/cloud_sql_proxy_x86.exe,然后选择链接另存为以下载该代理。将文件重命名为 cloud_sql_proxy.exe
如果此处未包含您的操作系统,您还可以通过源代码编译该代理

3.确定如何对代理进行身份验证

详细了解代理身份验证选项

4. 如果您的身份验证方法有相应需要,请创建一个服务帐号

如果使用服务帐号为该代理提供凭据,则您必须在创建该服务帐号时为其分配足够的权限。如果要使用更精细的 Identity Access and Management (IAM) 角色来管理 Cloud SQL 权限,您必须向服务帐号分配一个具有 cloudsql.instances.connect 权限的角色。以下预定义 Cloud SQL 角色拥有这项权限:

  • Cloud SQL Client
  • Cloud SQL Editor
  • Cloud SQL Admin

如果您要使用传统的项目角色(Viewer、Editor、Owner),则该服务帐号必须至少具有 Editor 角色。

  1. 转到 Google Cloud Console 中的服务帐号页面。

    转到“服务帐号”页面

  2. 选择包含您的 Cloud SQL 实例的项目。
  3. 点击创建服务帐号
  4. 创建服务帐号对话框中,为服务帐号提供一个描述性名称。
  5. 角色部分,选择以下角色之一:
    • Cloud SQL > Cloud SQL Client
    • Cloud SQL > Cloud SQL Editor
    • Cloud SQL > Cloud SQL Admin

    或者,您可以通过选择项目 > Editor 使用基本的 Editor 角色,但 Editor 角色拥有整个 Google Cloud 的权限。

    如果您看不到这些角色,则表明您的 Google Cloud 用户可能没有 resourcemanager.projects.setIamPolicy 权限。您可以转到 Google Cloud Console 中的 IAM 页面,然后搜索您的用户 ID 来检查您的权限。

  6. 服务帐号 ID 更改为一个不重复且易于识别的值。
  7. 点击提供新的私钥,并确认密钥类型为 JSON
  8. 点击创建

    私钥文件将下载到您的机器上。您可以将此文件移至其他位置,但要确保密钥文件的安全。

5. 确定如何为代理指定实例

详细了解代理实例指定选项

6. 启动代理

您传递给代理的选项取决于您先前选择的身份验证和实例指定选项。

您可以使用 TCP 套接字启动代理。

TCP 套接字

  1. 实例详情页面复制您的实例连接名称。

    例如:myproject:myregion:myinstance

  2. 如果您要使用服务帐号对代理进行身份验证,请记下随服务帐号一起创建的私钥文件在客户端机器上的位置。
  3. 启动代理。

    下面列出了一些可能的代理调用字符串:

    • 使用 Cloud SDK 身份验证:
      ./cloud_sql_proxy -instances=<INSTANCE_CONNECTION_NAME>=tcp:1433
      
      指定的端口必须尚未被本地数据库服务器等所占用。
    • 使用服务帐号并明确包含实例连接的名称(建议用于生产环境):
      ./cloud_sql_proxy -instances=<INSTANCE_CONNECTION_NAME>=tcp:1433 \
                        -credential_file=<PATH_TO_KEY_FILE> &
      

    如需详细了解代理选项,请参阅用于验证代理身份的选项用于指定实例的选项

7. 更新应用以使用代理连接到 Cloud SQL

使用代理连接到 Cloud SQL 实例所需的具体代码语句取决于您所使用的语言和框架。

您可以按照与 TCP 套接字相同的方式连接到代理。

TCP 套接字

使用 TCP 套接字时,代理作为本地主机通过以下地址提供:

127.0.0.1:1433

需要帮助?如需获得代理问题排查方面的帮助,请参阅排查 Cloud SQL 代理连接问题。也可参阅我们的 Cloud SQL 支持页面

同伴进程

您还可以将代理作为同伴进程运行,并从您的应用连接到代理。

为简洁起见,下面的代理调用语句使用本地 Cloud SDK 身份验证,根据您的身份验证方式以及实例指定方式的不同,具体的调用语句可能会有所不同。请参阅 Cloud SQL 代理身份验证选项

后续步骤