Hyperdrive 加速从 Cloudflare Workers 访问现有数据库,使单区域数据库也能像全球分布式一样。
通过在 Cloudflare 网络内维护到数据库的连接池,Hyperdrive 在发送查询前可减少七次到数据库的往返:TCP 握手(1 次)、TLS 协商(3 次)和数据库认证(3 次)。
Hyperdrive 能区分数据库的读查询和写查询,并缓存最常见的读查询,提升性能并减轻源数据库负载。
本指南将引导你完成:
- 创建第一个 Hyperdrive 配置。
- 创建 Cloudflare Worker 并将其绑定到 Hyperdrive 配置。
- 从 Worker 建立到公有数据库的连接。
开始之前,请确保已完成以下步骤:
- 若尚未注册,请注册 Cloudflare 账户 ↗。
- 安装
Node.js↗。建议使用 nvm ↗ 或 Volta ↗ 等 Node 版本管理器以避免权限问题并切换 Node.js 版本。Wrangler 需要 Node16.17.0或更高版本。 - 拥有可公开访问的 PostgreSQL 或 MySQL(或兼容)数据库。若数据库在私有网络中,请参阅使用 Workers VPC 连接私有数据库。
创建 Hyperdrive 绑定前,运行以下命令使用 Cloudflare 账户登录:
npx wrangler login将跳转到要求登录 Cloudflare 仪表板的网页。登录后会询问是否允许 Wrangler 更改 Cloudflare 账户。向下滚动并选择 Allow(允许) 继续。
运行以下命令创建名为 hyperdrive-tutorial 的新项目:
npm create cloudflare@latest -- hyperdrive-tutorialyarn create cloudflare hyperdrive-tutorialpnpm create cloudflare@latest hyperdrive-tutorial进行设置时,请选择以下选项:
- 对于 What would you like to start with?,选择
Hello World example。 - 对于 Which template would you like to use?,选择
Worker only。 - 对于 Which language do you want to use?,选择
TypeScript。 - 对于 Do you want to use git for version control?,选择
Yes。 - 对于 Do you want to deploy your application?,选择
No(部署前我们还会做一些修改)。
这将创建新的 hyperdrive-tutorial 目录,包含:
- 位于
src/index.ts的"Hello World"Worker。 wrangler.jsonc配置文件。wrangler.jsonc是hyperdrive-tutorialWorker 连接 Hyperdrive 的方式。
数据库驱动需要 Node.js 兼容性,须为 Workers 项目配置。
要为 Worker 或 Pages 项目启用内置运行时 API 和 polyfill,请在你的 Wrangler 配置文件中添加 nodejs_compat 兼容性标志,并将兼容性日期设置为 2024 年 9 月 23 日或更高版本。这将为 Workers 项目启用 Node.js 兼容性。
{
"compatibility_flags": [
"nodejs_compat"
],
// Set this to today's date
"compatibility_date": "2026-08-17"
}compatibility_flags = [ "nodejs_compat" ]
# Set this to today's date
compatibility_date = "2026-08-17"Hyperdrive 通过连接数据库、全球池化数据库连接并通过 Cloudflare 网络加速数据库访问来工作。
它将提供仅可从 Worker 访问的安全连接字符串,用于通过 Hyperdrive 连接数据库。 这意味着可将 Hyperdrive 连接字符串与现有驱动或 ORM 库配合使用,无需对代码做重大更改。
要创建第一个 Hyperdrive 数据库配置,进入刚为 Workers 项目创建的目录:
cd hyperdrive-tutorial创建第一个 Hyperdrive 需要:
- 数据库的 IP 地址(或主机名)和端口。
- 数据库用户名(例如
hyperdrive-demo)。 - 该用户名对应的密码。
- 希望 Hyperdrive 连接的数据库名称,例如
postgres或mysql。
Hyperdrive 接受数据库驱动常用的连接字符串格式组合上述参数:
postgres://USERNAME:PASSWORD@HOSTNAME_OR_IP_ADDRESS:PORT/database_name大多数数据库提供商会提供可直接复制到 Hyperdrive 的连接字符串。
要创建 Hyperdrive 连接,运行 wrangler 命令,将 --connection-string 标志的占位值替换为现有数据库的值:
npx wrangler hyperdrive create <YOUR_CONFIG_NAME> --connection-string="postgres://user:password@HOSTNAME_OR_IP_ADDRESS:PORT/database_name"
mysql://USERNAME:PASSWORD@HOSTNAME_OR_IP_ADDRESS:PORT/database_name大多数数据库提供商会提供可直接复制到 Hyperdrive 的连接字符串。
要创建 Hyperdrive 连接,运行 wrangler 命令,将 --connection-string 标志的占位值替换为现有数据库的值:
npx wrangler hyperdrive create <YOUR_CONFIG_NAME> --connection-string="mysql://user:password@HOSTNAME_OR_IP_ADDRESS:PORT/database_name"若成功,命令会输出新的 Hyperdrive 配置:
{
"hyperdrive": [
{
"binding": "HYPERDRIVE",
"id": "<example id: 57b7076f58be42419276f058a8968187>"
}
]
}复制 id 字段:下一步将用它使 Worker 脚本可访问 Hyperdrive。
你必须在 Wrangler 配置文件 中创建绑定,Worker 才能连接 Hyperdrive 配置。绑定(binding) 使 Worker 能够访问 Cloudflare 开发者平台上的资源(如 Hyperdrive)。
要将 Hyperdrive 配置绑定到 Worker,请在 Wrangler 文件末尾添加以下内容:
{
"hyperdrive": [
{
"binding": "HYPERDRIVE",
"id": "<YOUR_DATABASE_ID>" // the ID associated with the Hyperdrive you just created
}
]
}[[hyperdrive]]
binding = "HYPERDRIVE"
id = "<YOUR_DATABASE_ID>"具体说明:
- 为
binding(绑定名称)设置的值(字符串)将在 Worker 中引用此数据库。本教程中将绑定命名为HYPERDRIVE。 - 绑定必须是有效的 JavaScript 变量名 ↗。例如
binding = "hyperdrive"或binding = "productionDB"均为有效名称。 - 绑定在 Worker 中可通过
env.<BINDING_NAME>访问。
若开发时使用本地数据库,可在 Hyperdrive 配置中添加 localConnectionString,填入数据库连接字符串:
{
"hyperdrive": [
{
"binding": "HYPERDRIVE",
"id": "<YOUR_DATABASE_ID>", // the ID associated with the Hyperdrive you just created
"localConnectionString": "<LOCAL_DATABASE_CONNECTION_URI>"
}
]
}[[hyperdrive]]
binding = "HYPERDRIVE"
id = "<YOUR_DATABASE_ID>"
localConnectionString = "<LOCAL_DATABASE_CONNECTION_URI>"创建 Hyperdrive 配置并绑定到 Worker 后,可对数据库运行查询。
连接数据库需要数据库驱动以进行认证和查询。本教程使用 node-postgres (pg) ↗,最常用的 PostgreSQL 驱动之一。
要安装 pg,确保在 hyperdrive-tutorial 目录中。打开终端运行以下命令:
# This should install v8.13.0 or later
npm i pg# This should install v8.13.0 or later
yarn add pg# This should install v8.13.0 or later
pnpm add pg# This should install v8.13.0 or later
bun add pg若使用 TypeScript,还应安装 pg 的类型定义:
# This should install v8.13.0 or later
npm i -D @types/pg# This should install v8.13.0 or later
yarn add -D @types/pg# This should install v8.13.0 or later
pnpm add -D @types/pg# This should install v8.13.0 or later
bun add -d @types/pg安装驱动后,即可创建查询数据库的 Worker 脚本。
连接数据库需要数据库驱动以进行认证和查询。本教程使用 mysql2 ↗,最常用的 MySQL 驱动之一。
要安装 mysql2,确保在 hyperdrive-tutorial 目录中。打开终端运行以下命令:
# This should install v3.13.0 or later
npm i mysql2# This should install v3.13.0 or later
yarn add mysql2# This should install v3.13.0 or later
pnpm add mysql2# This should install v3.13.0 or later
bun add mysql2安装驱动后,即可创建查询数据库的 Worker 脚本。
设置数据库后,将从 Worker 内运行 SQL 查询。
打开 hyperdrive-tutorial Worker 的 index.ts 文件。
index.ts 是配置 Worker 与 Hyperdrive 交互的地方。
用以下代码填充 index.ts 文件:
// pg 8.13.0 or later is recommended
import { Client } from "pg";
export interface Env {
// If you set another name in the Wrangler config file as the value for 'binding',
// replace "HYPERDRIVE" with the variable name you defined.
HYPERDRIVE: Hyperdrive;
}
export default {
async fetch(request, env, ctx): Promise<Response> {
// Create a new client on each request. Hyperdrive maintains the underlying
// database connection pool, so creating a new client is fast.
const sql = new Client({
connectionString: env.HYPERDRIVE.connectionString,
});
try {
// Connect to the database
await sql.connect();
// Sample query
const results = await sql.query(`SELECT * FROM pg_tables`);
// Return result rows as JSON
return Response.json(results.rows);
} catch (e) {
console.error(e);
return Response.json(
{ error: e instanceof Error ? e.message : e },
{ status: 500 },
);
}
},
} satisfies ExportedHandler<Env>;收到请求后,上述代码执行以下操作:
- 使用 Hyperdrive 连接字符串创建通过 Hyperdrive 连接数据库的新数据库客户端。
- 通过
await sql.query()发起查询,输出数据库中所有表(用户和系统创建)作为示例查询。 - 以 JSON 将响应返回客户端。请求结束时 Hyperdrive 自动清理客户端连接,并在池中保持底层数据库连接打开以供复用。
设置数据库后,将从 Worker 内运行 SQL 查询。
打开 hyperdrive-tutorial Worker 的 index.ts 文件。
index.ts 是配置 Worker 与 Hyperdrive 交互的地方。
用以下代码填充 index.ts 文件:
// mysql2 v3.13.0 or later is required
import { createConnection } from "mysql2/promise";
export interface Env {
// If you set another name in the Wrangler config file as the value for 'binding',
// replace "HYPERDRIVE" with the variable name you defined.
HYPERDRIVE: Hyperdrive;
}
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,
// The following line is needed for mysql2 compatibility with Workers
// mysql2 uses eval() to optimize result parsing for rows with > 100 columns
// Configure mysql2 to use static parsing instead of eval() parsing with disableEval
disableEval: true,
});
try {
// Sample query
const [results, fields] = await connection.query("SHOW tables;");
// Return result rows as JSON
return new Response(JSON.stringify({ results, fields }), {
headers: {
"Content-Type": "application/json",
"Access-Control-Allow-Origin": "*",
},
});
} catch (e) {
console.error(e);
return Response.json(
{ error: e instanceof Error ? e.message : e },
{ status: 500 },
);
}
},
} satisfies ExportedHandler<Env>;收到请求后,上述代码执行以下操作:
- 使用 Hyperdrive 连接字符串创建通过 Hyperdrive 连接数据库的新数据库客户端。
- 通过
await connection.query发起查询,输出数据库中所有表(用户和系统创建)作为示例查询。 - 以 JSON 将响应返回客户端。请求结束时 Hyperdrive 自动清理客户端连接,并在池中保持底层数据库连接打开以供复用。
部署前可通过 wrangler dev 在本地测试 Worker。这会在本机运行 Worker 代码同时连接数据库。
localConnectionString 字段支持本地和远程数据库,允许从本地运行的 Worker 项目直接连接数据库。需要时须指定 SSL/TLS 模式(Postgres 为 sslmode=require,MySQL 为 sslMode=REQUIRED)。
本地开发连接数据库时,在 wrangler.jsonc 中配置 localConnectionString:
{
"hyperdrive": [
{
"binding": "HYPERDRIVE",
"id": "your-hyperdrive-id",
"localConnectionString": "postgres://user:password@your-database-host:5432/database",
},
],
}或设置环境变量:
export CLOUDFLARE_HYPERDRIVE_LOCAL_CONNECTION_STRING_HYPERDRIVE="postgres://user:password@your-database-host:5432/database"然后启动本地开发:
npx wrangler dev现在可部署 Worker 使项目在 Internet 上可访问。部署 Worker 请运行:
npx wrangler deploy
# Outputs: https://hyperdrive-tutorial.<YOUR_SUBDOMAIN>.workers.dev现在可访问新创建项目的 URL 以查询实时数据库。
例如,若新 Worker 的 URL 为 hyperdrive-tutorial.<YOUR_SUBDOMAIN>.workers.dev,访问 https://hyperdrive-tutorial.<YOUR_SUBDOMAIN>.workers.dev/ 会向 Worker 发送直接查询数据库的请求。
完成本教程后,你已创建 Hyperdrive 配置、访问该数据库的 Worker,并在全球部署项目。
- 了解更多 Hyperdrive 工作原理。
- 如何 配置查询缓存。
- 连接数据库到 Hyperdrive 时 故障排除常见问题。
若有功能请求或发现 bug,请加入 Cloudflare 开发者 Discord 社区 ↗ 直接向 Cloudflare 团队反馈。