← Hyperdrive (Postgres & MySQL) / hyperdrive / examples
Подключение к MySQL
Hyperdrive поддерживает MySQL и совместимые с MySQL базы данных, популярные драйверы, а также библиотек Object Relational Mapper (ORM), использующих эти драйверы.
Создание Hyperdrive
Чтобы создать Hyperdrive для подключения к существующей базе данных MySQL, используйте Wrangler CLI или Панель управления Cloudflare ↗.
При использовании Wrangler замените значение-заполнитель, переданное в --connection-string строкой подключения к вашей базе данных:
# wrangler v3.11 and above required
npx wrangler hyperdrive create my-first-hyperdrive --connection-string="mysql://user:[email protected]:3306/databasenamehere"Приведённая выше команда выведет ID вашего Hyperdrive, который потребуется указать в конфигурационный файл Wrangler для вашего проекта Workers:
{
// required for database drivers to function
"compatibility_flags": [
"nodejs_compat"
],
// Set this to today's date
"compatibility_date": "2026-08-28",
"hyperdrive": [
{
"binding": "HYPERDRIVE",
"id": "<your-hyperdrive-id-here>"
}
]
}compatibility_flags = [ "nodejs_compat" ]
# Set this to today's date
compatibility_date = "2026-08-28"
[[hyperdrive]]
binding = "HYPERDRIVE"
id = "<your-hyperdrive-id-here>"Это позволит Hyperdrive формировать динамическую строку подключения внутри вашего Worker, которую можно передать существующему драйверу базы данных. См. Примеры использования драйвера чтобы узнать, как настроить драйвер базы данных для Hyperdrive.
См. Документация с примерами с пошаговыми инструкциями по настройке Hyperdrive для нескольких популярных провайдеров баз данных.
Поддерживаемые драйверы
Hyperdrive использует Workers Поддержка TCP-сокетов для поддержки TCP подключений к базам данных. В следующей таблице перечислены поддерживаемые драйверы баз данных и минимальные версии, совместимые с Hyperdrive:
| Драйвер | Документация | Минимально необходимая версия | Примечания |
|---|---|---|---|
| mysql2 (рекомендуется) | документация по mysql2 ↗ | [email protected] |
Поддерживается как в Workers, так и в Pages. Рекомендуется использовать Promise API. |
| mysql | документация по mysql ↗ | [email protected] |
Требует compatibility_flags = ["nodejs_compat"] и compatibility_date = "2024-09-23" см. Совместимость с Node.js. Требуется wrangler 3.78.7 или более поздней версии. |
| Drizzle | Документация Drizzle ↗ | Требует [email protected] |
|
| Kysely | Документация Kysely ↗ | Требует [email protected] |
^ Отмеченные библиотеки могут использовать в качестве зависимости либо mysql, либо mysql2.
Могут поддерживаться и другие драйверы и ORM, не указанные здесь: этот список не является исчерпывающим.
Драйверы баз данных и совместимость с Node.js
Совместимость с Node.js требуется для драйверов баз данных, включая mysql и mysql2, и должен быть настроен для вашего проекта Workers.
Для дат совместимости 2026-08-04 или более поздней версии проекты Workers и Pages включают оба nodejs_compat и nodejs_compat_v2 по умолчанию. Встроенные API среды выполнения и полифиллы доступны без дополнительной настройки. Для этих дат совместимости данные флаги не используются. Существующим проектам не нужно удалять их при обновлении даты совместимости.
Если ваша дата совместимости раньше 2026-08-04, добавьте nodejs_compat флаг совместимости в ваш конфигурационный файл Wrangler чтобы включить:
{
"compatibility_flags": [
"nodejs_compat"
]
}compatibility_flags = [ "nodejs_compat" ]Чтобы отключить Совместимость с Node.js полностью при дате совместимости 2026-08-04 или более поздней версии удалите положительные флаги, если они есть. Затем добавьте оба no_nodejs_compat и no_nodejs_compat_v2. Примеры настройки см. в Флаг совместимости с Node.js.
Поддерживаемые режимы TLS (SSL)
Hyperdrive поддерживает следующие режимы подключения MySQL TLS/SSL при подключении к исходной базе данных:
| Режим | Поддерживается | Подробности |
|---|---|---|
DISABLED |
Нет | Hyperdrive не поддерживает незащищённые соединения в открытом виде. |
PREFERRED |
Нет (используйте REQUIRED) |
Hyperdrive всегда использует TLS. |
REQUIRED |
Да (по умолчанию) | Требуется TLS, а сертификаты сервера проверяются на основе WebPKI. |
VERIFY_CA |
Да | Проверяет, что TLS-сертификат сервера подписан корневым CA на стороне клиента. |
VERIFY_IDENTITY |
Да | Помимо VERIFY_CA проверках Hyperdrive требует, чтобы имя хоста базы данных совпадало с Subject Alternative Name (SAN) или Common Name (CN) в сертификате. |
См. Сертификаты SSL/TLS документации подробно описано, как настроить VERIFY_CA или VERIFY_IDENTITY режимов TLS (SSL) для Hyperdrive.
Примеры использования драйвера
Следующие примеры показывают, как:
- Создайте клиент базы данных с помощью драйвера базы данных.
- Передайте строку подключения Hyperdrive и подключитесь к базе данных.
- Запросите данные из вашей базы данных через Hyperdrive.
mysql2
Следующий код Workers показывает, как использовать mysql2 ↗ с Hyperdrive через Promise API.
Установите mysql2 ↗ драйвер:
npm i mysql2@>3.13.0Добавьте необходимые флаги совместимости Node.js и привязку Hyperdrive в свой wrangler.jsonc файле:
{
// required for database drivers to function
"compatibility_flags": [
"nodejs_compat"
],
// Set this to today's date
"compatibility_date": "2026-08-28",
"hyperdrive": [
{
"binding": "HYPERDRIVE",
"id": "<your-hyperdrive-id-here>"
}
]
}compatibility_flags = [ "nodejs_compat" ]
# Set this to today's date
compatibility_date = "2026-08-28"
[[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>;mysql
Следующий код Workers показывает, как использовать mysql ↗ с Hyperdrive.
Установите mysql ↗ драйвер:
npm i mysqlДобавьте необходимые флаги совместимости Node.js и привязку Hyperdrive в свой wrangler.jsonc файле:
{
// required for database drivers to function
"compatibility_flags": [
"nodejs_compat"
],
// Set this to today's date
"compatibility_date": "2026-08-28",
"hyperdrive": [
{
"binding": "HYPERDRIVE",
"id": "<your-hyperdrive-id-here>"
}
]
}compatibility_flags = [ "nodejs_compat" ]
# Set this to today's date
compatibility_date = "2026-08-28"
[[hyperdrive]]
binding = "HYPERDRIVE"
id = "<your-hyperdrive-id-here>"Создайте новое подключение и передайте параметры Hyperdrive:
import { createConnection } from "mysql";
export default {
async fetch(request, env, ctx): Promise<Response> {
const result = await new Promise<any>((resolve) => {
// Create a connection using the mysql driver with the Hyperdrive credentials (only accessible from your Worker).
const connection = createConnection({
host: env.HYPERDRIVE.host,
user: env.HYPERDRIVE.user,
password: env.HYPERDRIVE.password,
database: env.HYPERDRIVE.database,
port: env.HYPERDRIVE.port,
});
connection.connect((error: { message: string }) => {
if (error) {
throw new Error(error.message);
}
// Sample query
connection.query("SHOW tables;", [], (error, rows, fields) => {
resolve({ fields, rows });
});
});
});
// Return result as JSON
return new Response(JSON.stringify(result), {
headers: {
"Content-Type": "application/json",
},
});
},
} satisfies ExportedHandler<Env>;Определение подключений от Hyperdrive
Чтобы определить активные подключения к серверу базы данных MySQL со стороны Hyperdrive:
- Подключения Hyperdrive к вашей базе данных будут отображаться с
Cloudflare HyperdriveвPROGRAM_NAMEстолбец вperformance_schema.threadsв таблице. - Запустите
SELECT DISTINCT USER, HOST, PROGRAM_NAME FROM performance_schema.threads WHERE PROGRAM_NAME = 'Cloudflare Hyperdrive'чтобы показать, удерживает ли Hyperdrive в данный момент открытое соединение (или соединения) с вашей базой данных.
Следующие шаги
- Ознакомьтесь со списком поддерживаемые интеграции с базами данных чтобы узнать о других способах подключения к существующим базам данных.
- Подробнее об использовании Socket API в Worker.
- Изучите протоколы, поддерживаемые Workers.