使用 Cloud SQL 代理 Docker 映像连接 MySQL 客户端

本页面介绍了如何使用 Cloud SQL 代理 Docker 映像从运行 Linux 或 Compute Engine Linux 实例的客户端机器将 mysql 客户端连接到 Cloud SQL 实例。

准备工作

您必须先完成以下操作:

使用代理 Docker 映像连接 mysql 客户端

如需使用代理 Docker 映像建立连接,请按如下所述操作

  1. 启用 Cloud SQL Admin API。

    启用 API

  2. 如果您使用的是 Compute Engine 实例,请为该实例执行以下准备工作:
    1. 显示 Compute Engine 实例的属性:
      gcloud compute instances describe [GCE_INSTANCE_NAME]
    2. 验证该实例上启用的范围。

      如需使用范围进行身份验证,需要启用以下两个范围:

      • https://www.googleapis.com/auth/sqlservice.admin
      • https://www.googleapis.com/auth/devstorage.read_write

      或者,借助 https://www.googleapis.com/auth/cloud-platform 范围启用所有 Google Cloud Platform API。

      如果您的 Compute Engine 实例没有正确的范围,您可以更新该实例,使之包含这些范围。如需了解详情,请参阅 Compute Engine 文档

    3. 按照连接到 Linux 实例中的说明,打开到该实例的终端连接。
  3. 如果尚未安装 mysql 客户端,请将其安装到 Compute Engine 实例或客户端机器上。

    Debian/Ubuntu

    使用软件包管理器安装 MySQL 客户端:

    sudo apt-get update
    sudo apt-get install mysql-server
    

    CentOS/RHEL

    使用软件包管理器安装 MySQL 客户端:

    sudo yum install mysql
    

    openSUSE

    使用软件包管理器安装 MySQL 客户端:

    sudo zypper install mysql-server
    

    其他平台

    1. MySQL Community Server 下载页面下载适用于您的平台的 MySQL Community Server。
      Community Server 包含 MySQL 客户端。
    2. 按照下载页面上的说明安装 Community Server。

    如需详细了解如何安装 MySQL,请参阅 MySQL 参考手册安装和升级 MySQL

  4. 安装 Docker 客户端(如果需要):
    curl https://get.docker.com | sh
    sudo usermod -aG docker $USER
    

    如果您使用的是容器优化型 Compute Engine 实例,那么该实例已经安装了 Docker 客户端。

  5. 通过 Google Container Registry 安装代理 Docker 映像。
    docker pull gcr.io/cloudsql-docker/gce-proxy:1.16
  6. 如果您在本地机器(而非 Compute Engine 实例)上运行代理 Docker 映像,或者您的 Compute Engine 实例具有的范围不正确,请创建一个 Google Cloud Platform 服务帐号。

    如果使用服务帐号为该代理提供凭据,则您必须在创建该服务帐号时为其分配足够的权限。如果要使用更精细的 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. 点击创建

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

    启动代理时,以“PATH_TO_KEY_FILE”形式提供此密钥文件的路径。

  7. 转到 Google Cloud Console 中的“Cloud SQL 实例”页面。

    转到“Cloud SQL 实例”页面

  8. 选择相应实例以打开其“实例详情”页面,然后复制实例连接名称

    例如:myproject:us-central1:myinstance

  9. 启动代理。

    您可以使用 TCP 套接字或 Unix 套接字启动代理,具体使用哪一个要取决于您所用的语言和环境。采用 Java 编程语言编写的应用或 Windows 环境不支持 Unix 套接字。

    TCP 套接字

    docker run -d \
      -v <PATH_TO_KEY_FILE>:/config \
      -p 127.0.0.1:3306:3306 \
      gcr.io/cloudsql-docker/gce-proxy:1.16 /cloud_sql_proxy \
      -instances=<INSTANCE_CONNECTION_NAME>=tcp:0.0.0.0:3306 -credential_file=/config
    

    如果您使用的是 Compute Engine 实例提供的凭据,请勿包含 credential_file 参数和 -v <PATH_TO_KEY_FILE>:/config 行。

    请务必在 -p 中指定 127.0.0.1 前缀,以免代理在本地主机外部公开。若要从 Docker 容器外部访问端口,需要在实例参数中指定“0.0.0.0”。

    Unix 套接字

    docker run -d -v /cloudsql:/cloudsql \
      -v <PATH_TO_KEY_FILE>:/config \
      gcr.io/cloudsql-docker/gce-proxy:1.16 /cloud_sql_proxy -dir=/cloudsql \
      -instances=<INSTANCE_CONNECTION_NAME> -credential_file=/config
    

    如果您使用的是 Compute Engine 实例提供的凭据,请勿包含 credential_file 参数和 -v <PATH_TO_KEY_FILE>:/config 行。

    如果您使用的是容器优化型映像,请使用可写目录代替 /cloudsql,例如:

    -v /mnt/stateful_partition/cloudsql:/cloudsql

    您可以指定多个实例(用英文逗号分隔),您还可以使用 Compute Engine 元数据以动态方式确定要连接的实例。 详细了解代理参数。

  10. 启动客户端:

    使用的连接字符串取决于您是使用 TCP 套接字还是 UNIX 套接字启动代理。

    TCP 套接字

    1. 启动 mysql 客户端:
      mysql -u <USERNAME> -p --host 127.0.0.1
      

      使用 TCP 套接字建立连接时,可通过 127.0.0.1 访问代理。

    2. 如果出现提示,请输入密码。
    3. 系统会显示 mysql 提示符。

    Unix 套接字

    1. 启动 mysql 客户端:
      mysql -u <USERNAME> -p -S /cloudsql/<INSTANCE_CONNECTION_NAME>
      
    2. 输入密码。
    3. 系统会显示 mysql 提示符。

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

及时更新代理 Docker 映像

代理 Docker 映像基于特定版本的 Cloud SQL 代理。 当 Cloud SQL 代理推出新版本时,请获取代理 Docker 映像的新版本,以使您的环境保持最新状态。您可以查看 Cloud SQL 代理 GitHub 版本页面来了解 Cloud SQL 代理的最新版本。Google Groups Cloud SQL 公告论坛也会公布未来的代理版本。

后续步骤