从 Compute Engine 连接 mysql 客户端

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

您可以使用专用 IP、公共 IP、Cloud SQL Auth 代理或 Cloud SQL Auth 代理 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 实例的终端连接。

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

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

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

3.如果尚未安装 mysql 客户端,请将其安装到 Compute Engine 实例上。

Debian/Ubuntu

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

sudo apt-get update
sudo apt-get install mariadb-server-10.3

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

4.使用 mysql 客户端进行连接。

mysql --host=[CLOUD_SQL_PRIVATE_IP_ADDR] --user=root --password

公共 IP

如需使用公共 IP 进行连接,请执行以下操作


如需在 Cloud Shell Editor 中直接获取有关此任务的分步指导,请点击操作演示

操作演示


以下部分将引导您完成与点击操作演示相同的步骤。

1.如果 Compute Engine 实例还没有静态 IPv4 IP 地址,请为其添加一个。

您无法使用 IPv6 连接到 Compute Engine。如需详细了解如何添加静态 IP 地址,请参阅 Compute Engine 文档中的预留新的静态外部 IP 地址

2. 将 Compute Engine 实例的静态 IP 地址授权为可连接到 Cloud SQL 实例的网络。

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

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

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

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

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

4.如果尚未安装 mysql 客户端,请将其安装到 Compute Engine 实例上。

Debian/Ubuntu

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

sudo apt-get update
sudo apt-get install mariadb-server-10.3

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

5. 使用 mysql 客户端进行连接。

mysql --host=[CLOUD_SQL_PUBLIC_IP_ADDR] --user=root --password
Run the following gcloud command to find the CLOUD_SQL_PUBLIC_IP_ADDR:

gcloud sql instances list

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

6.系统会显示 mysql 提示符。

7. 如果您需要使未使用的连接保持活跃状态,请执行以下操作:

设置 TCP keepalive

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

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

Cloud SQL Auth 代理

如需在 Compute Engine 中使用 Cloud SQL Auth 代理进行连接,请执行以下操作

1.启用 Cloud SQL Admin API。

启用 API

2. 创建服务帐号。

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

    转到“服务帐号”页面

  2. 选择包含您的 Cloud SQL 实例的项目。
  3. 点击创建服务帐号
  4. 创建服务帐号对话框中,为服务帐号输入一个描述性名称。
  5. 服务帐号 ID 更改为一个可识别的唯一值,然后点击创建
  6. 对于角色,选择下列其中一个角色,点击继续,然后点击完成
    • Cloud SQL > Cloud SQL Client
    • Cloud SQL > Cloud SQL Editor
    • Cloud SQL > Cloud SQL Admin
  7. 点击新服务帐号的操作菜单,然后选择管理密钥
  8. 点击添加键下拉菜单,然后点击创建新密钥
  9. 确认密钥类型是 JSON,然后点击创建

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

如果 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. 点击添加

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

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

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

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

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

4.如果尚未安装 mysql 客户端,请将其安装到 Compute Engine 实例上。

Debian/Ubuntu

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

sudo apt-get update
sudo apt-get install mariadb-server-10.3

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

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

Linux 64 位

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

Linux 32 位

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

Windows 64 位

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

Windows 32 位

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

Cloud SQL Auth 代理 Docker 映像

为方便起见,GitHub 上的 Cloud SQL Auth 代理代码库中提供了多个包含 Cloud SQL Auth 代理的容器映像。您可以通过 Docker 使用以下命令将最新映像拉取到本地机器:
docker pull gcr.io/cloudsql-docker/gce-proxy:1.19.1

其他操作系统

对于此处未列出的其他操作系统,您可以通过源代码编译 Cloud SQL Auth 代理

6.启动 Cloud SQL Auth 代理。

根据您的语言和环境,您可以开始使用 TCP 套接字、Unix 套接字或 Cloud SQL Auth 代理 Docker 映像启动 Cloud SQL Auth 代理。Cloud SQL Auth 代理二进制文件连接到命令行中指定的一个或多个 Cloud SQL 实例,并打开本地连接作为 TCP 或 Unix 套接字。其他应用和服务(例如您的应用代码或数据库管理客户端工具)可以通过这些 TCP 或 Unix 套接字连接连接到 Cloud SQL 实例。

TCP 套接字

对于 TCP 连接,Cloud SQL Auth 代理默认侦听 localhost (127.0.0.1)。因此,当您为实例指定 tcp:PORT_NUMBER 时,本地连接位于 127.0.0.1:PORT_NUMBER

或者,您也可以为本地连接指定其他地址。例如,下方展示了如何让 Cloud SQL Auth 代理侦听 0.0.0.0:1234 的本地连接:

  ./cloud_sql_proxy -instances=INSTANCE_CONNECTION_NAME=tcp:0.0.0.0:1234
  1. 复制您的 INSTANCE_CONNECTION_NAME。您可以在 Google Cloud Console 中的实例概览页面上找到它,也可以通过运行如下命令获取:

    gcloud sql instances describe INSTANCE_NAME
    .

    例如:myproject:myregion:myinstance

  2. 如果实例同时配置了公共 IP 和专用 IP,并且您希望 Cloud SQL Auth 代理使用专用 IP 地址,您必须在启动 Cloud SQL Auth 代理时提供以下选项:
    -ip_address_types=PRIVATE
  3. 如果您要使用服务帐号对 Cloud SQL Auth 代理进行身份验证,请记下随服务帐号一起创建的私钥文件在客户端机器上的位置。
  4. 启动 Cloud SQL Auth 代理。

    一些可能的 Cloud SQL Auth 代理调用字符串如下所示:

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

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

Unix 套接字

Cloud SQL Auth 代理可以侦听 Unix 套接字,该套接字是 Posix 标准机制,该机制使用文件夹来管理同一主机上运行的两个进程之间的通信。使用 Unix 套接字的优势在于提高了安全性并缩短了延迟时间,但您无法从外部机器访问 Unix 套接字。

如需创建和使用 Unix 套接字,目标目录必须存在,并且 Cloud SQL Auth 代理和应用必须对其具有读写访问权限。

  1. 如果您要明确指定实例,请复制您的 INSTANCE_CONNECTION_NAME。您可以在 Google Cloud Console 中的实例概览页面上找到它,也可以通过运行以下命令来获取:

    gcloud sql instances describe INSTANCE_NAME
    .

    例如:myproject:myregion:myinstance

  2. 创建要用来存放 Cloud SQL Auth 代理套接字的目录:
    sudo mkdir /cloudsql; sudo chmod 777 /cloudsql
  3. 如果您要使用服务帐号对 Cloud SQL Auth 代理进行身份验证,请记下随服务帐号一起创建的私钥文件在客户端机器上的位置。
  4. 打开一个新的终端窗口并启动 Cloud SQL Auth 代理。

    一些可能的 Cloud SQL Auth 代理调用字符串如下所示:

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

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

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

Cloud SQL Auth 代理 Docker 映像

如需在 Docker 容器中运行 Cloud SQL Auth 代理,请使用 Google Container Registry 提供的 Cloud SQL Auth 代理 Docker 映像。

您可以使用以下所示命令通过 TCP 套接字或 Unix 套接字启动 Cloud SQL Auth 代理。这些选项使用 INSTANCE_CONNECTION_NAME 作为连接字符串来标识 Cloud SQL 实例。您可以在 Google Cloud Console 中实例的概览页面上找到 INSTANCE_CONNECTION_NAME,或者运行以下命令:

gcloud sql instances describe INSTANCE_NAME
.

例如:myproject:myregion:myinstance

您可以使用 TCP 套接字或 Unix 套接字启动 Cloud SQL Auth 代理,具体使用哪一个要取决于您所用的语言和环境。采用 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.19.1 /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 前缀,以免 Cloud SQL Auth 代理在本地主机外部公开。若要从 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.19.1 /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 元数据以动态方式确定要连接的实例。 详细了解 Cloud SQL Auth 代理参数

7. 启动 mysql 会话。

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

TCP 套接字

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

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

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

使用 Unix 套接字

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

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

后续步骤