基于 Vitess 的无服务器 MySQL — Slack、GitHub、YouTube 同款数据库。通过部署请求实现非阻塞式结构变更。注册账号、创建数据库、完成连接。
PlanetScale 已于 2024 年 4 月取消免费套餐,目前起步价为 $39/月。今天选择 PlanetScale 的真正理由是其面向团队规模的成熟架构,而非价格优势。
前往 planetscale.com ↗ 注册账号,选择合适的套餐(无免费层;PlanetScale 定价 ↗)。
创建数据库时填写以下信息:
初始化大约需要 1–2 分钟。
进入数据库控制台,点击 Connect,选择你的编程语言,PlanetScale 会自动生成对应格式的连接字符串。
DATABASE_URL=mysql://<user>:<password>@<host>/<db>?ssl={"rejectUnauthorized":true}
SSL 是必须的(不支持明文连接)。大多数 MySQL 客户端在使用正确 URL 的情况下会自动处理 SSL。
将连接字符串保存到环境变量中。凭据按分支隔离(详见下文),可随时在控制台中轮换。
任何 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 客户端无法运行的环境中使用。无服务器驱动文档 ↗。
进入 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 无缝配合。
PlanetScale 首创了数据库分支机制,其工作模型如下:
实际工作流程:
pscale branch create my-db add-users-table
pscale deploy-request create my-db add-users-table
# 在控制台审核后执行:
pscale deploy-request deploy my-db <number>
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 即可连接到生产环境(默认只读,可切换为允许写入)。适合临时查询,且不会将凭据暴露在终端历史记录中。
这是 PlanetScale 最出乎意料的限制:外键约束默认是禁用的,因为 Vitess 跨节点分片后,跨分片的外键约束无法正常工作。
对于非分片数据库,可通过控制台 → Settings → Foreign key constraints 手动开启外键支持。但官方推荐做法是在应用代码层(或通过 ORM)来维护关联完整性。
如果外键是硬性需求,Neon 会是更友好的选择。
控制台 → Insights 页面,提供以下信息:
每条慢查询均可点击查看详情——包括完整 SQL、平均延迟与 p99 延迟,以及索引优化建议(如适用)。远比手动翻阅 MySQL 慢查询日志友好得多。
系统每日自动备份,保留期限按套餐而定。也可通过控制台或 CLI 按需手动备份:
pscale backup create my-db main
恢复时会创建一个新分支(而非直接覆盖主分支),便于验证后再切换,降低风险。
CREATE INDEX CONCURRENTLY,但在线结构变更机制会自动处理相关需求。对大多数应用代码而言,这些限制不会造成影响;若你使用了高级 MySQL 特性,请查阅 兼容性矩阵 ↗。