PlanetScale

支持分支的无服务器 MySQL - Git 式工作流、零停机迁移、无限扩展

TL;DR

是什么:支持分支和无阻塞架构更改的无服务器 MySQL 平台。

为什么用:类 Git 的数据库分支、零停机迁移、无限扩展。

Quick Start

注册:访问 planetscale.com 并创建账户。

安装 CLI

brew install planetscale/tap/pscale  # macOS
# 或
scoop install pscale  # Windows

创建数据库

pscale auth login
pscale database create myapp --region us-east

连接

pscale shell myapp main

创建表

CREATE TABLE users (
  id INT AUTO_INCREMENT PRIMARY KEY,
  name VARCHAR(255) NOT NULL,
  email VARCHAR(255) UNIQUE
);

Cheatsheet

命令描述
pscale database create name创建数据库
pscale shell db branch连接到分支
pscale branch create db name创建分支
pscale deploy-request create db branch创建部署请求
pscale connect db branch本地连接代理
pscale password create db branch name创建连接密码

Gotchas

分支工作流

# 创建开发分支
pscale branch create myapp add-orders

# 连接到分支
pscale shell myapp add-orders

# 进行架构更改
CREATE TABLE orders (
  id INT AUTO_INCREMENT PRIMARY KEY,
  user_id INT,
  total DECIMAL(10,2)
);

# 创建部署请求
pscale deploy-request create myapp add-orders

# 部署到生产(通过 UI 或 CLI)
pscale deploy-request deploy myapp 1

连接字符串

# 生成连接字符串
pscale password create myapp main production-password

# 在应用中使用
DATABASE_URL="mysql://user:password@host/database?ssl=true"

与框架一起使用

// Prisma
// schema.prisma
datasource db {
  provider     = "mysql"
  url          = env("DATABASE_URL")
  relationMode = "prisma"  // PlanetScale 必需
}

// Drizzle
import { drizzle } from 'drizzle-orm/planetscale-serverless';
import { connect } from '@planetscale/database';

const connection = connect({
  url: process.env.DATABASE_URL
});
const db = drizzle(connection);

不支持外键(使用应用层)

// PlanetScale 不支持外键以实现在线迁移
// 在应用代码中处理关系

// 使用 Prisma relationMode: "prisma"
model User {
  id     Int     @id @default(autoincrement())
  orders Order[]
}

model Order {
  id     Int  @id @default(autoincrement())
  userId Int
  user   User @relation(fields: [userId], references: [id])
}

Next Steps