从 Compute Engine 连接 mysql 客户端

本页面介绍如何使用安装在 Compute Engine 实例上的 mysql 客户端连接到 Cloud SQL。

如果要连接到 MySQL 实例,您可以使用专用 IP、公共 IP、Cloud SQL 代理或代理 Docker 映像。

准备工作

在能够连接到 Cloud SQL 实例之前,实例中必须包含默认数据库用户(根用户)。

此任务不包括有关设置 Compute Engine 实例的说明。如果您在创建和配置 Compute Engine 实例方面需要帮助,请参阅 Compute Engine 文档

使用专用 IP 连接

要使用专用 IP 从某个 Compute Engine 实例连接到 Cloud SQL,您必须为您的环境设置专用服务访问通道,并且必须将 Cloud SQL 实例配置为使用专用 IP。您的 Compute Engine 实例必须与 Cloud SQL 实例位于同一区域中,并且必须位于为专用连接配置的网络上。了解详情

  1. 按照配置专用 IP 连接中的说明,将您的实例配置为使用专用 IP。
  2. 打开连接到 Compute Engine 实例的终端连接。

    根据实例的操作系统,使用相应的说明:

  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. 用 mysql 客户端建立连接。
    mysql --host=[CLOUD_SQL_PRIVATE_IP_ADDR] --user=root --password
    

使用公共 IP 地址连接

  1. 如果 Compute Engine 实例还没有静态 IPv4 IP 地址,请为其添加一个。 您无法使用 IPv6 连接到 Compute Engine。如需详细了解如何添加静态 IP 地址,请参阅 Compute Engine 文档中的预留新的静态外部 IP 地址
  2. 将 Compute Engine 实例的静态 IP 地址授权为可连接到 Cloud SQL 实例的网络。

    如需了解详情,请参阅配置 IP 连接的访问权限

  3. 打开连接到 Compute Engine 实例的终端连接。

    根据实例的操作系统,使用相应的说明:

  4. 如果尚未安装 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

  5. 用 mysql 客户端建立连接。
    mysql --host=[CLOUD_SQL_PUBLIC_IP_ADDR] --user=root --password
    
    运行以下 gcloud 命令查找 CLOUD_SQL_PUBLIC_IP_ADDR:
    gcloud sql instances list
    

    如需查看有关如何使用 SSL 进行连接的示例,请参阅通过 SSL 连接

  6. 系统会显示 mysql 提示符。
  7. 如果您需要使未使用的连接保持活跃状态,请设置 TCP keepalive

    如需了解详情,请参阅 Compute Engine 文档中的在实例和互联网之间通信

    对于实例,连接会自动保持活跃状态。

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

使用 Cloud SQL 代理连接

  1. 启用 Cloud SQL Admin API。

    启用 API

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

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

  4. 如果 Compute Engine 实例与 Cloud SQL 实例分处不同的项目,请确保其服务帐号在包含 Cloud SQL 实例的项目中拥有适当的权限:
    1. 转到 Google Cloud Console 中的 Compute Engine 实例列表。

      转到 Compute Engine 实例列表

    2. 如有必要,请选择与 Compute Engine 实例关联的项目。
    3. 选择 Compute Engine 实例,显示其属性。
    4. 在 Compute Engine 实例属性中,复制服务帐号的名称。
    5. 转到 Google Cloud Console 中的 IAM 和管理项目页面。

      转到“IAM 和管理项目”页面

    6. 选择包含 Cloud SQL 实例的项目。
    7. 搜索服务帐号名称。
    8. 如果服务帐号已存在,且该帐号拥有一个包含 cloudsql.instances.connect 权限的角色,则您可以前进至第 4 步

      Cloud SQL ClientCloud SQL EditorCloud SQL Admin 角色均提供必要的权限,就像旧版 EditorOwner 项目角色一样。

    9. 否则,请点击添加以添加服务帐号。
    10. 添加成员对话框中,提供服务帐号的名称,然后选择一个包含 cloudsql.instances.connect 权限的角色(除 Viewer 之外的任何 Cloud SQL 预定义角色均可)。

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

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

    11. 点击添加

      现在,您将看到拥有指定角色的服务帐号。

  5. 打开连接到 Compute Engine 实例的终端连接。

    根据实例的操作系统,使用相应的说明:

  6. 如果您的 Compute Engine 实例正在运行 RHEL 或 CentOS 公开映像,则 SELinux 可能会阻止代理连接。如果发生这种情况,必须配置 SELinux 功能以允许连接。

    如需详细了解用于 RHEL 的 SELinux,请参阅 RHEL 文档。 如需详细了解用于 CentOS 的 SELinux,请参阅 CentOS 文档

  7. 如果尚未安装 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

  8. 在 Compute Engine 实例上安装 Cloud SQL 代理。

    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
      

    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
    如果此处未包含您的操作系统,您还可以使用源代码编译代理

  9. 启动代理。

    根据您的语言和环境,您可以使用 TCP 套接字或 Unix 套接字启动代理。

    TCP 套接字

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

      例如:myproject:myregion:myinstance

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

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

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

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

    Unix 套接字

    1. 如果使用显式实例指定,请从实例详情页面复制您的实例连接名称。
    2. 创建要用来存放代理套接字的目录:
      sudo mkdir /cloudsql; sudo chmod 777 /cloudsql
    3. 如果您要使用服务帐号对代理进行身份验证,请记下随服务帐号一起创建的私钥文件在客户端机器上的位置。
    4. 打开一个新终端窗口并启动代理。

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

      • 使用服务帐号并明确包含实例连接的名称(建议用于生产环境):
        ./cloud_sql_proxy -dir=/cloudsql -instances=<INSTANCE_CONNECTION_NAME> \
                          -credential_file=<PATH_TO_KEY_FILE> &
      • 使用 Cloud SDK 身份验证和自动实例发现:
        ./cloud_sql_proxy -dir=/cloudsql &

      建议最好在单独的终端中启动代理,这样便于您监控其输出,避免与其他程序的输出相混淆。

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

    5. 使用 Cloud SQL 代理和 unix 套接字连接到 Cloud SQL 时,请确保套接字文件名的长度不超过系统限制。一般来说,套接字文件名包含 91 到 108 个字符,具体取决于您所用的系统。在 Linux 上,该文件名通常包含 108 个字符;您可以使用以下命令进行检查:
      cat /usr/include/linux/un.h | grep "define UNIX_PATH_MAX"
  10. 启动 mysql 会话。

    使用的连接字符串取决于您是使用 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 支持页面

后续步骤