跳转到内容
搜索文档

Google Cloud SQL 示例

将 Hyperdrive 连接到 Google Cloud SQL MySQL 数据库。

最后更新 查看 MarkdownAgent 设置

本示例展示如何将 Hyperdrive 连接到 Google Cloud SQL MySQL 数据库实例。

1. 允许 Hyperdrive 访问

要允许 Hyperdrive 连接数据库,需确保 Hyperdrive 拥有有效用户凭据和网络访问权限。

Cloud 控制台

Google Cloud Console 中创建实例或编辑现有实例时:

要允许 Hyperdrive 访问实例:

  1. Cloud Console 中,选择希望 Hyperdrive 连接的实例。
  2. 展开 Connections(连接) > Networking(网络) > 确保已启用 Public IP(公共 IP) > Add a Network(添加网络) 并输入 0.0.0.0/0
  3. 选择 Done(完成) > Save(保存) 保存更改。
  4. 在侧边栏选择 Overview(概览),记下实例的 Public IP address(公网 IP 地址)

要创建 Hyperdrive 连接用户:

  1. 在侧边栏选择 Users(用户)
  2. 选择 Add User Account(添加用户账户) > 选择 Built-in authentication(内置身份验证)
  3. 输入名称(例如 hyperdrive-user),然后选择 Generate(生成) 生成密码。
  4. 在选择 Add(添加) 创建用户前,将此密码复制到剪贴板。

有了用户名、密码、公网 IP 地址和(可选)数据库名称(默认:mysql)后,即可创建 Hyperdrive 数据库配置。

2. 创建数据库配置

配置 Hyperdrive 需要:

  • 数据库的 IP 地址(或主机名)和端口。
  • 上一步配置的数据库用户名(例如 hyperdrive-demo)。
  • 该用户名对应的密码。
  • 希望 Hyperdrive 连接的数据库名称,例如 mysql

Hyperdrive 接受数据库驱动常用的连接字符串格式组合上述参数:

mysql://USERNAME:PASSWORD@HOSTNAME_OR_IP_ADDRESS:PORT/database_name

大多数数据库提供商会提供可直接复制到 Hyperdrive 的连接字符串。

使用 Wrangler CLI 创建 Hyperdrive 配置时,打开终端并运行以下命令。

  • 将 <NAME_OF_HYPERDRIVE_CONFIG> 替换为 Hyperdrive 配置名称并粘贴数据库主机提供的连接字符串,或
  • userpasswordHOSTNAME_OR_IP_ADDRESSportdatabase_name 占位符替换为你的数据库信息:
npx wrangler hyperdrive create <NAME_OF_HYPERDRIVE_CONFIG> --connection-string="mysql://user:password@HOSTNAME_OR_IP_ADDRESS:PORT/database_name"

该命令会输出 Wrangler 配置文件 的绑定:

{
	"$schema": "./node_modules/wrangler/config-schema.json",
	"name": "hyperdrive-example",
	"main": "src/index.ts",
	// Set this to today's date
	"compatibility_date": "2026-08-17",
	"compatibility_flags": [
		"nodejs_compat"
	],
	// Pasted from the output of `wrangler hyperdrive create <NAME_OF_HYPERDRIVE_CONFIG> --connection-string=[...]` above.
	"hyperdrive": [
		{
			"binding": "HYPERDRIVE",
			"id": "<ID OF THE CREATED HYPERDRIVE CONFIGURATION>"
		}
	]
}
"$schema" = "./node_modules/wrangler/config-schema.json"
name = "hyperdrive-example"
main = "src/index.ts"
# Set this to today's date
compatibility_date = "2026-08-17"
compatibility_flags = [ "nodejs_compat" ]

[[hyperdrive]]
binding = "HYPERDRIVE"
id = "<ID OF THE CREATED HYPERDRIVE CONFIGURATION>"

3. 从 Worker 使用 Hyperdrive

安装 mysql2 驱动:

npm i mysql2@>3.13.0

wrangler.jsonc 中添加所需的 Node.js 兼容性标志和 Hyperdrive 绑定:

wrangler.jsonc 中添加 Node.js 兼容性标志和 Hyperdrive 绑定(binding):

{
	// required for database drivers to function
	"compatibility_flags": [
		"nodejs_compat"
	],
	// Set this to today's date
	"compatibility_date": "2026-08-17",
	"hyperdrive": [
		{
			"binding": "HYPERDRIVE",
			"id": "<your-hyperdrive-id-here>"
		}
	]
}
compatibility_flags = [ "nodejs_compat" ]
# Set this to today's date
compatibility_date = "2026-08-17"

[[hyperdrive]]
binding = "HYPERDRIVE"
id = "<your-hyperdrive-id-here>"

创建新的 connection 实例并传入 Hyperdrive 参数:

// mysql2 v3.13.0 or later is required
import { createConnection } from "mysql2/promise";

export default {
	async fetch(request, env, ctx): Promise<Response> {
		// Create a new connection on each request. Hyperdrive maintains the underlying
		// database connection pool, so creating a new connection is fast.
		const connection = await createConnection({
			host: env.HYPERDRIVE.host,
			user: env.HYPERDRIVE.user,
			password: env.HYPERDRIVE.password,
			database: env.HYPERDRIVE.database,
			port: env.HYPERDRIVE.port,

			// Required to enable mysql2 compatibility for Workers
			disableEval: true,
		});

		try {
			// Sample query
			const [results, fields] = await connection.query("SHOW tables;");

			// Return result rows as JSON
			return Response.json({ results, fields });
		} catch (e) {
			console.error(e);
			return Response.json(
				{ error: e instanceof Error ? e.message : e },
				{ status: 500 },
			);
		}
	},
} satisfies ExportedHandler<Env>;

后续步骤

这篇文档对您有帮助吗?