连接到 Cloud SQL-MySQL 来源

本页面介绍如何将私有 Cloud Data Fusion 实例连接到托管 MySQL 数据库的私有 Cloud SQL 实例。Postgres 和 SQL Server 实例采用类似的设置。可以建立公共连接

推荐:出于安全考虑,请使用 Cloud SQL 和 Cloud Data Fusion 的私有实例。

在 Cloud Data Fusion 和 Cloud SQL 中创建专用实例

如需从专用 Cloud Data Fusion 实例连接到私有 Cloud SQL 实例,请使用代理 Compute Engine 虚拟机。之所以需要代理,是因为 Cloud SQL 网络未与 Cloud Data Fusion 网络直接对等互连,并且传递对等方无法相互通信(请参阅 VPC 网络对等互连概览)。

如需创建专用实例,请按以下步骤操作:

  1. 如果您还没有此类实例,请创建一个私有 Cloud Data Fusion 实例。其中包括:

    1. 设置 VPC 网络
    2. 分配 IP 范围
  2. 在 Cloud Data Fusion 实例所在的同一 VPC 网络中创建专用 Cloud SQL 实例

  3. 创建实例后,转到 Cloud SQL 实例页面并展开实例详情。在连接到此实例部分中,复制 IP 和连接名称。

    转到“Cloud SQL 实例”

创建专用 Compute Engine 虚拟机

如需创建虚拟机,您可以在 Cloud Shell 或安装了 Google Cloud SDK 的其他环境中输入以下命令。

这些命令会创建一个同时具有内部和公共 IP 地址的虚拟机(未在示例虚拟机创建命令中指定 --no-address),以便该虚拟机可以访问 Container Registry 以获取代理映像。您可以使用内部 IP 地址,但还必须为虚拟机所在的子网启用专用 Google 访问通道

  1. 导出以下环境变量:

    export PROJECT=CUSTOMER_PROJECT
    export REGION=VM_REGION
    export ZONE=`gcloud compute zones list --filter="name=${REGION}" --limit 1 --uri --project=${PROJECT}| sed 's/.*\///'`
    export NETWORK=CUSTOMER_VPC_NETWORK_NAME
    export SUBNET=CUSTOMER_VPC_SUBNET_NAME
    export INSTANCE_NAME=COMPUTE_ENGINE_VM_NAME
    export SQL_CONN=SQL_INSTANCE_CONNECTION_NAME
    export CDF_IP_RANGE=CLOUD_DATA_FUSION_IP_RANGE
    export VM_IMAGE=$(gcloud compute images list --project=$PROJECT --filter=family:cos-stable --format='value(selfLink.scope())' --limit=1)
    export SQL_PORT=DB_PORT # MySQL 3306 # PostgreSQL 5432 # SQLServer 1433
    

    替换以下内容:

    • CUSTOMER_PROJECT:您的项目的名称
    • VM_REGION:Compute Engine 虚拟机所在的区域
    • CUSTOMER_VPC_NETWORK_NAME:您的网络的名称
    • CUSTOMER_VPC_SUBNET_NAME:您的子网的名称
    • COMPUTE_ENGINE_VM_NAME:Compute Engine 虚拟机的名称
    • SQL_INSTANCE_CONNECTION_NAME:上一步中的连接名称
    • CLOUD_DATA_FUSION_IP_RANGE:IP 地址范围
    • DB_PORT:Cloud SQL 数据库的端口号
  2. 使用以下 gcloud CLI 命令创建防火墙规则,以允许 Cloud Data Fusion 入站流量:

    gcloud compute firewall-rules create allow-private-cdf \
    --allow=tcp:22,tcp:${SQL_PORT} \
    --source-ranges=$CDF_IP_RANGE --network=$NETWORK --project=$PROJECT
    
  3. 使用以下 gcloud CLI 命令创建虚拟机:

    gcloud compute --project=${PROJECT} instances create ${INSTANCE_NAME} \
    --zone=${ZONE} \
    --machine-type=g1-small \
    --subnet=${SUBNET} \
    --metadata=startup-script="docker run -d -p 0.0.0.0:${SQL_PORT}:${SQL_PORT} gcr.io/cloudsql-docker/gce-proxy:latest /cloud_sql_proxy -instances=${SQL_CONN}=tcp:0.0.0.0:${SQL_PORT}" \
    --maintenance-policy=MIGRATE \
    --scopes=https://www.googleapis.com/auth/cloud-platform \
    --image=${VM_IMAGE} \
    --image-project=cos-cloud
    
  4. 使用以下 gcloud CLI 命令获取虚拟机内部 IP:

    export IP=`gcloud compute \
    --project=${PROJECT} instances describe ${INSTANCE_NAME} \
    --zone ${ZONE} | grep "networkIP" | awk '{print $2}'`
    
  5. 使用以下 gcloud CLI 命令,将虚拟机内部 IP 提升为静态 IP:

    gcloud compute --project=${PROJECT} addresses create mysql-proxy \
    --addresses ${IP} --region ${REGION} --subnet ${SUBNET}
    
  6. 获取在设置连接时要在 Cloud Data Fusion MySQL JDBC 连接字符串中使用的 IP:

    echo ${IP}
    

使用静态 IP 地址创建虚拟机后,将该 IP 用作主机,或在 JDBC 连接字符串中输入该主机,以从 Cloud Data Fusion 访问 MySQL 数据库。

从 Cloud Data Fusion 中访问 MySQL

您需要先从 Cloud Data Fusion Hub(或直接从 MySQL 社区下载内容)安装 MySQL JDBC 驱动程序,然后才能从 Cloud Data Fusion 实例连接到 MySQL 实例。

在 Cloud Data Fusion 中输入 MySQL 数据库的连接详细信息。您可以在 Wrangler 页面上输入详细信息并测试连接。

可选:连接到 MySQL 的其他方法

您可以通过以下方式在 Cloud Data Fusion 中访问 MySQL:

  • Studio 页面上,点击 MySQL 来源插件并输入连接详细信息。
  • Studio 页面上,请改用具有类似属性(连接字符串用户名密码连接参数)的数据库源插件。

其他连接

虽然建议连接专用实例,但还可以建立以下连接:

  • 将公共 Cloud Data Fusion 实例连接到公共 Cloud SQL 实例(通过使用公共 Cloud SQL 代理或将授权网络中的 0.0.0.0/0 范围列入许可名单)。请参阅 Cloud SQL 的公共 IP 连接选项
  • 私有 Cloud Data Fusion 实例和公共 Cloud SQL 实例(通过在授权网络中使用公共 Cloud SQL 代理)。
  • 一个公共 Cloud Data Fusion 实例和一个私有 Cloud SQL 实例。