INTEGRITY Документация

PlanetScale

PlanetScale представляет собой платформу баз данных, которая предоставляет базы данных, совместимые с MySQL, и базы данных PostgreSQL, делая их более масштабируемыми, а управление ими более простым и безопасным.

Чтобы подключиться к PlanetScale с помощью Hyperdrive, выполните следующие шаги:

1. Разрешите доступ к Hyperdrive

Hyperdrive можно подключить к любой существующей MySQL-совместимой базе данных PlanetScale, создав нового пользователя и получив строку подключения к базе данных.

PlanetScale Dashboard

  1. Перейдите в панель управления PlanetScale и выберите базу данных, к которой нужно подключиться.
  2. Нажмите Подключить. Введите hyperdrive-user в качестве имени пароля (или укажите своё) и настройте разрешения по своему усмотрению. Выберите Создать пароль. Запишите имя пользователя и пароль, так как они больше не будут показаны.
  3. Выберите Прочее в качестве языка или фреймворка. Запишите хост базы данных, имя базы данных, имя пользователя базы данных и пароль. Они понадобятся вам для создания конфигурации базы данных в Hyperdrive.

Имея host, имя базы данных, имя пользователя и пароль, теперь можно создать конфигурацию базы данных Hyperdrive.

2. Создание конфигурации базы данных

Чтобы настроить Hyperdrive, вам потребуется:

  • IP-адрес (или имя хоста) и порт вашей базы данных.
  • Имя пользователя базы данных (например, hyperdrive-demo) которую вы настроили на предыдущем шаге.
  • Пароль, связанный с этим именем пользователя.
  • Имя базы данных, к которой должен подключиться Hyperdrive. Например, mysql.

Hyperdrive принимает комбинацию этих параметров в стандартном формате строки подключения, который используется драйверами баз данных:

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

Большинство провайдеров баз данных предоставляют строку подключения, которую можно скопировать и вставить прямо в Hyperdrive.

Чтобы создать конфигурацию Hyperdrive с помощью Wrangler CLI, откройте терминал и выполните следующую команду.

  • Замените <NAME_OF_HYPERDRIVE_CONFIG> на имя вашей конфигурации Hyperdrive и вставьте строку подключения, предоставленную вашим хостом базы данных, или,
  • Замените user, password, HOSTNAME_OR_IP_ADDRESS, port, а также database_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-28",
	"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-28"
compatibility_flags = [ "nodejs_compat" ]

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

3. Использование Hyperdrive в вашем Worker

Установите 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>;

Следующие шаги

Настройка интеграции с PlanetScale

Чтобы настроить интеграцию с PlanetScale:

  1. Для подключения понадобится уже существующая база данных PlanetScale. Создайте базу данных PlanetScale или импортировать существующую базу данных в PlanetScale.

  2. Из раздела веб-консоль PlanetScale, создайте products таблицу следующим запросом:

    CREATE TABLE products (
      id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
      name varchar(255) NOT NULL,
      image_url varchar(255),
      category_id INT,
      KEY category_id_idx (category_id)
    );
  3. Добавьте немного данных в только что созданную таблицу. Выполните следующую команду, чтобы добавить в таблицу товар и категорию:

    INSERT INTO products (name, image_url, category_id)
    VALUES ('Ballpoint pen', 'https://example.com/500x500', '1');
  4. Настройте учётные данные базы данных PlanetScale в вашем Worker:

    Добавьте учётные данные базы данных PlanetScale в качестве секретов вашего Worker. Получить данные для подключения можно в PlanetScale Dashboard создав строку подключения, а затем добавьте их как секреты с помощью Wrangler:

    # Add the database host as a secret
    npx wrangler secret put DATABASE_HOST
    # When prompted, paste your PlanetScale host
    
    # Add the database username as a secret
    npx wrangler secret put DATABASE_USERNAME
    # When prompted, paste your PlanetScale username
    
    # Add the database password as a secret
    npx wrangler secret put DATABASE_PASSWORD
    # When prompted, paste your PlanetScale password
  5. В Worker установите @planetscale/database драйвер для подключения к вашей базе данных PlanetScale и начала работы с данными:

    npm i @planetscale/database
  6. Следующий пример показывает, как выполнить запрос к базе данных PlanetScale из Worker. Учётные данные для подключения к PlanetScale добавлены в Worker в качестве секретов.

    import { connect } from "@planetscale/database";
    
    export default {
    	async fetch(request, env) {
    		const config = {
    			host: env.DATABASE_HOST,
    			username: env.DATABASE_USERNAME,
    			password: env.DATABASE_PASSWORD,
    			// see https://github.com/cloudflare/workerd/issues/698
    			fetch: (url, init) => {
    				delete init["cache"];
    				return fetch(url, init);
    			},
    		};
    
    		const conn = connect(config);
    		const data = await conn.execute("SELECT * FROM products;");
    		return new Response(JSON.stringify(data.rows), {
    			status: 200,
    			headers: {
    				"Content-Type": "application/json",
    			},
    		});
    	},
    };

Подробнее о PlanetScale см. в официальная документация PlanetScale.