连接到 MySQL
作为 BigQuery 管理员,您可以创建一个连接来访问 MySQL 数据。借助此连接,数据分析师可以查询 MySQL 中的数据。
支持的 MySQL 环境和版本
BigQuery 联合查询支持以下 MySQL 部署环境:
- 通过 Cloud VPN 或 Cloud Interconnect 连接到 Google Cloud 的本地 MySQL 实例
- Compute Engine 上的自管式 MySQL 实例
- 可通过公共 IP 地址或网络连接访问的云托管 MySQL 实例
BigQuery 联合查询支持以下 MySQL 版本:
- MySQL 8.4 LTS
- MySQL 8.0
准备工作
启用必要的 API,配置 MySQL 数据库,并授予为用户提供执行本文档中的每个任务所需权限的 Identity and Access Management 角色。
启用 BigQuery Connection API。
如果您计划使用网络连接通过专用网络路由流量,请同时启用 Compute Engine API。
在 MySQL 数据库中,创建一个对您要查询的表或数据库具有
SELECT权限的专用数据库用户:CREATE USER 'USER_NAME'@'%' IDENTIFIED BY 'PASSWORD'; GRANT SELECT ON DATABASE_NAME.* TO 'USER_NAME'@'%'; FLUSH PRIVILEGES;
替换以下内容:
USER_NAME:数据库用户的用户名。PASSWORD:数据库用户的密码。DATABASE_NAME:默认 MySQL 数据库名称。
通过执行以下操作之一,配置与 MySQL 数据库实例的网络连接:
- 如果您要通过专用网络路由流量,请在 BigQuery 连接所在的区域中创建网络连接。不支持 DNS 对等互连;请使用可在 VPC 网络中解析的 IP 地址或主机名进行连接。
- 如果您通过公共互联网进行连接,请将所有 Google IP 地址范围添加到 MySQL 数据库的防火墙规则中。
所需的角色
如需获得连接到 MySQL 所需的权限,请让您的管理员为您授予以下 IAM 角色:
-
如需创建连接:针对项目的 BigQuery Connection Admin (
roles/bigquery.connectionAdmin) -
配置网络连接:项目的 Compute Admin (
roles/compute.admin)
如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限。
将 BigQuery 连接到 MySQL
您可以在Google Cloud 控制台或 bq 命令行工具中将 BigQuery 连接到 MySQL。
控制台
在 Google Cloud 控制台中,前往 BigQuery 页面。
在浏览器窗格中,点击 添加数据。
添加数据页面随即会打开。
在过滤条件窗格中的数据源类型部分,选择数据库。
或者,在搜索数据源字段中,输入
mysql。在精选数据源部分中,点击 MySQL。
在就地访问外部数据部分中,点击说明为对 MySQL 进行联合查询的 BigQuery 联合解决方案卡片(而不是 Cloud SQL 卡片)。
外部数据源窗格随即打开。
在外部数据源窗格中,配置以下内容:
- 在连接 ID 字段中,输入唯一的连接 ID(例如
mysql_prod_conn)。 - 在位置类型部分中,选择区域,然后选择 BigQuery 数据集所在的区域。使用此连接的查询必须从此区域运行。
- (可选)在易记名称字段中,输入连接的描述性名称。
- (可选)在说明字段中,输入此连接资源的说明。
- 在加密部分中,选择 Google-managed encryption key,或选择 Cloud KMS 密钥以使用客户管理的加密密钥 (CMEK)。
- 在主机:端口字段中,以
HOST:PORT格式(例如10.10.0.2:3306)输入 MySQL 数据库服务器的主机和端口。 - 在用户名字段中,输入您在前提条件中创建的数据库用户。
- 在密码字段中,输入数据库用户的密码。
- 在数据库字段中,输入默认 MySQL 数据库名称。
- (可选)在网络连接字段中,如果您使用的是专用连接,请以
projects/PROJECT_ID/regions/NA_REGION/networkAttachments/ATTACHMENT_NAME格式输入网络连接的资源路径。 - 在 TLS 模式列表中,选择一种受支持的 TLS 模式(例如,加密数据,验证 CA 和主机名(推荐))。
- 在证书授权机构 (CA) 列表中,选择公共 CA (Web PKI),或选择自定义 CA 并粘贴 PEM 格式的证书。
- 在连接 ID 字段中,输入唯一的连接 ID(例如
点击创建连接。
bq
使用带有 --connection 标志的 bq mk 命令。
bq mk --connection \ --location=LOCATION \ --project_id=PROJECT_ID \ --connector_configuration '{ "connector_id": "mysql", "endpoint": { "host_port": "HOST_PORT" }, "asset": { "database": "DATABASE" }, "authentication": { "username_password": { "username": "USERNAME", "password": { "plaintext": "PASSWORD" } } }, "tls": { "mode": "TLS_MODE" }, "network": { "private_service_connect": { "network_attachment": "projects/PROJECT_ID/regions/NA_REGION/networkAttachments/ATTACHMENT_NAME" } } }' \ CONNECTION_ID
替换以下内容:
LOCATION:与您打算与 MySQL 一起查询的数据集匹配的 BigQuery 区域(例如us-central1)。使用此连接的查询必须从此区域运行。PROJECT_ID:您的 Google Cloud 项目 ID。HOST_PORT:MySQL 数据库服务器的主机和端口,格式为HOST:PORT(例如10.10.0.2:3306)。DATABASE:默认 MySQL 数据库名称。USERNAME:MySQL 数据库用户。PASSWORD:数据库用户的密码。TLS_MODE:TLS 加密模式(ENCRYPT_VERIFY_CA_AND_HOST、ENCRYPT_VERIFY_CA、ENCRYPT_VERIFY_NONE或DISABLE)。如果您将自定义 CA 证书与ENCRYPT_VERIFY_CA_AND_HOST或ENCRYPT_VERIFY_CA搭配使用,请在"tls"下添加"private_pki": { "trusted_certificates_pem": "CERT_CONTENT" }对象。NA_REGION:网络连接所在的区域。ATTACHMENT_NAME:网络连接的名称。如果通过公共 IP 连接,请省略"network"对象。CONNECTION_ID:此连接的唯一标识符。- (可选)
--kms_key_name=KMS_KEY_NAME:客户管理的加密密钥 (CMEK)。如果省略,凭证会受到默认 Google-owned and Google-managed encryption key的保护。
传输层安全协议 (TLS) 配置
MySQL 连接器支持传输层安全协议 (TLS),用于加密 BigQuery 与 MySQL 数据库之间传输的查询流量。将 BigQuery 连接到 MySQL 时,请选择以下 TLS 模式之一:
加密数据并验证证书授权机构 (CA) 和主机名(
ENCRYPT_VERIFY_CA_AND_HOST模式)。使用 TLS 执行完整的服务器验证。加密传输中的所有数据,验证数据库服务器的证书是否由受信任的 CA 签名,并检查您要连接的主机名是否与证书中的通用名称 (CN) 或主体备用名称 (SAN) 匹配。对于通过公共 IP 建立的连接,此字段为必填项。加密数据并仅验证 CA(
ENCRYPT_VERIFY_CA模式)。加密传输中的所有数据,并验证服务器的证书是否由受信任的 CA 签名,但不验证服务器的主机名。如果服务器证书由可信 CA 签名,但您使用与证书 CN 或 SAN 不匹配的 IP 地址或主机名进行连接,请使用此模式。仅加密(
ENCRYPT_VERIFY_NONE模式)。加密在 BigQuery 与服务器之间传输的所有数据。 不执行证书或主机名验证。仅建议在私有 VPC 中使用。不加密或验证(
DISABLE模式)。不加密数据,也不执行证书或主机名验证。仅在通过受保护 VPC 网络中的专用网络连接进行连接时才允许。
PEM 格式的可信服务器证书
如果您使用 ENCRYPT_VERIFY_CA_AND_HOST 模式或 ENCRYPT_VERIFY_CA 模式,请执行以下操作:
- 如果您的数据库服务器证书由公共 CA(例如 Mozilla 根 CA 计划中包含的 CA,包括 Let's Encrypt、DigiCert 或 Google Trust Services)签名,则您无需提供证书。默认情况下,公共 CA 的根证书是受信任的。
- 如果您使用由组织内的内部或私有 CA 签名的证书,或者使用自签名证书,则必须在连接设置期间,在受信任的 PEM 证书字段中提供隐私增强邮件 (PEM) 格式的完整证书链。
与用户共享连接
您可以授予以下角色,以使用户可以查询数据并管理连接:
roles/bigquery.connectionUser:允许用户使用连接与外部数据源建立连接,并对其运行查询。roles/bigquery.connectionAdmin:允许用户管理连接。
如需详细了解 BigQuery 中的 IAM 角色和权限,请参阅预定义的角色和权限。
从下列选项中选择一项:
控制台
前往 BigQuery 页面。
连接列在项目的连接组中。
在左侧窗格中,点击 探索器:

如果您没有看到左侧窗格,请点击 展开左侧窗格以打开该窗格。
点击您的项目,点击连接,然后选择一个连接。
在详细信息窗格中,点击共享以共享连接。之后,执行以下操作:
在连接权限对话框中,通过添加或修改主账号与其他主账号共享连接。
点击保存。
bq
您不能使用 bq 命令行工具共享连接。如需共享连接,请使用 Google Cloud 控制台或 BigQuery Connections API 方法共享连接。
API
使用 BigQuery Connections REST API 参考文档部分中的 projects.locations.connections.setIAM 方法,并提供一个 policy 资源实例。
Java
试用此示例之前,请按照 BigQuery 快速入门:使用客户端库中的 Java 设置说明进行操作。 如需了解详情,请参阅 BigQuery Java API 参考文档。
如需向 BigQuery 进行身份验证,请设置应用默认凭证。如需了解详情,请参阅为客户端库设置身份验证。
价格
联合查询和连接需支付以下费用:
- 您需要按标准的联合查询价格付费。
- 使用 VPC 需遵循虚拟私有云价格。
- 使用 Cloud VPN 按照 Cloud VPN 价格计费。
- 使用 Cloud NAT 按照 Cloud NAT 价格计费。
后续步骤
- 了解不同的连接类型。
- 了解如何管理连接。
- 了解如何查询 MySQL 数据。