教程 / 后端集成 / 配置 PlanetScale (MySQL)
📝 文字 ● 初级 更新于 2026-05-13

配置 PlanetScale (MySQL)

基于 Vitess 的无服务器 MySQL — Slack、GitHub、YouTube 同款数据库。通过部署请求实现非阻塞式结构变更。注册账号、创建数据库、完成连接。

何时选择 PlanetScale

0
  • 适合选择 PlanetScale 的场景 — 你的技术栈或团队已在使用 MySQL、需要在生产数据库上进行非阻塞式迁移,或者想要 Vitess 级别的水平扩展能力而无需自行运维。
  • 选择 Neon — 若你需要 Postgres,且希望获得相似的无服务器定价模式。
  • 选择 Supabase — 若你需要将 Postgres 与认证/存储打包在一个产品中使用。
  • 选择 AWS RDS / Cloud SQL — 若你需要完全掌控 MySQL 配置(自定义 my.cnf 参数、插件等)。

PlanetScale 已于 2024 年 4 月取消免费套餐,目前起步价为 $39/月。今天选择 PlanetScale 的真正理由是其面向团队规模的成熟架构,而非价格优势。

注册账号并创建数据库

1

前往 planetscale.com ↗ 注册账号,选择合适的套餐(无免费层;PlanetScale 定价 ↗)。

创建数据库时填写以下信息:

  • 名称 — 随意命名。
  • 区域 — 选择离你应用服务器最近的区域,支持 AWS、GCP 及 PlanetScale 自有区域。
  • 集群规格 — 从 PS-10 起步,按需升级。

初始化大约需要 1–2 分钟。

获取连接字符串

2

进入数据库控制台,点击 Connect,选择你的编程语言,PlanetScale 会自动生成对应格式的连接字符串。

DATABASE_URL=mysql://<user>:<password>@<host>/<db>?ssl={"rejectUnauthorized":true}

SSL 是必须的(不支持明文连接)。大多数 MySQL 客户端在使用正确 URL 的情况下会自动处理 SSL。

将连接字符串保存到环境变量中。凭据按分支隔离(详见下文),可随时在控制台中轮换。

在应用中完成连接

3

任何 MySQL 客户端库都可以使用。常见接入方式:

Node + mysql2:

npm install mysql2
import mysql from "mysql2/promise";

const pool = mysql.createPool({ uri: process.env.DATABASE_URL });

const [rows] = await pool.query("SELECT * FROM users WHERE id = ?", [123]);

无服务器 / 边缘环境(PlanetScale HTTP 驱动):

npm install @planetscale/database
import { connect } from "@planetscale/database";

const conn = connect({ url: process.env.DATABASE_URL });

const results = await conn.execute("SELECT * FROM users WHERE id = ?", [123]);

HTTP 驱动可在 Cloudflare Workers、Vercel Edge Functions、AWS Lambda 等传统 TCP MySQL 客户端无法运行的环境中使用。无服务器驱动文档 ↗

创建第一张数据表

4

进入 PlanetScale 控制台 → Console (Beta) 标签页,使用 SQL 编辑器执行;或通过任意 MySQL 客户端(如 mysql CLI、TablePlus、DBeaver)连接后执行。

CREATE TABLE users (
  id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  email VARCHAR(255) NOT NULL UNIQUE,
  created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
);

ORM 方面:Drizzle、Prisma、Kysely 均提供 MySQL 适配器,可与 PlanetScale 无缝配合。

分支与部署请求(核心特性)

5

PlanetScale 首创了数据库分支机制,其工作模型如下:

  • 主分支(Main) — 对应生产环境。不能直接执行 DDL(结构变更),标记为"生产"状态可防止误删表。
  • 开发分支(Dev) — 从主分支结构复制而来,可随意执行 DDL,在隔离环境中测试结构变更。
  • 部署请求(Deploy Request) — 变更就绪后,从开发分支向主分支发起"部署请求"。PlanetScale 会展示结构差异、执行 CI 检查,并借助 Vitess 在线结构变更将修改应用到主分支(无表锁,零停机)。

实际工作流程:

pscale branch create my-db add-users-table
pscale deploy-request create my-db add-users-table
# 在控制台审核后执行:
pscale deploy-request deploy my-db <number>

分支文档 ↗ · 部署请求 ↗

安装 CLI

6
brew install planetscale/tap/pscale   # macOS
# Or download from https://github.com/planetscale/cli/releases for Windows/Linux

pscale auth login

CLI 可通过本地代理连接到 PlanetScale:

pscale connect my-db main --port 3306

之后本地执行 mysql -h 127.0.0.1 即可连接到生产环境(默认只读,可切换为允许写入)。适合临时查询,且不会将凭据暴露在终端历史记录中。

默认不支持外键

7

这是 PlanetScale 最出乎意料的限制:外键约束默认是禁用的,因为 Vitess 跨节点分片后,跨分片的外键约束无法正常工作。

对于非分片数据库,可通过控制台 → Settings → Foreign key constraints 手动开启外键支持。但官方推荐做法是在应用代码层(或通过 ORM)来维护关联完整性。

如果外键是硬性需求,Neon 会是更友好的选择。

监控与数据洞察

8

控制台 → Insights 页面,提供以下信息:

  • 按总耗时排序的最慢查询
  • 按执行次数排序的查询
  • 读写比例分布
  • 连接数统计

每条慢查询均可点击查看详情——包括完整 SQL、平均延迟与 p99 延迟,以及索引优化建议(如适用)。远比手动翻阅 MySQL 慢查询日志友好得多。

备份

9

系统每日自动备份,保留期限按套餐而定。也可通过控制台或 CLI 按需手动备份:

pscale backup create my-db main

恢复时会创建一个新分支(而非直接覆盖主分支),便于验证后再切换,降低风险。

Vitess 的已知限制。原生不支持跨分片 JOIN(若将来分片,查询需要谨慎设计)。不支持存储过程和触发器。不支持 CREATE INDEX CONCURRENTLY,但在线结构变更机制会自动处理相关需求。对大多数应用代码而言,这些限制不会造成影响;若你使用了高级 MySQL 特性,请查阅 兼容性矩阵 ↗

定价说明

10

Hobby 套餐($39/月)— 10 GB 存储、每月 10 亿次行读取、1000 万次行写入。Scaler 套餐($59/月)— 100 GB 存储,可升级至 Scaler Pro 获取更多资源。

一个明显的缺口:没有免费套餐。如果你刚起步且需要免费方案,在有收入之前,SupabaseNeon 是更合适的选择。

官方参考资料

下一步