PlanetScale 部署请求 #

本章将深入介绍 PlanetScale 的部署请求(Deploy Request)机制,帮助你安全高效地进行 Schema 变更。

部署请求概览 #

什么是 Deploy Request? #

text
┌─────────────────────────────────────────────────────────────┐
│                    Deploy Request 概念                        │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│   Deploy Request (DR) 是将 Schema 变更从开发分支            │
│   合并到生产分支的请求。                                    │
│                                                             │
│   类似于:                                                  │
│   - Git 的 Pull Request                                    │
│   - 代码审查流程                                           │
│                                                             │
│   作用:                                                    │
│   ├── 审核 Schema 变更                                     │
│   ├── 确保变更安全                                         │
│   ├── 记录变更历史                                         │
│   └── 支持回滚                                             │
│                                                             │
│   流程:                                                    │
│   开发分支 ──> Deploy Request ──> 审核 ──> 部署 ──> 生产   │
│                                                             │
└─────────────────────────────────────────────────────────────┘

Deploy Request 状态 #

text
┌─────────────────────────────────────────────────────────────┐
│                    状态流转                                   │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│   pending_review                                            │
│   ┌─────────────────────────────────────────────────────┐  │
│   │  等待审核                                           │  │
│   │  - 可以查看变更内容                                 │  │
│   │  - 可以添加评论                                     │  │
│   └─────────────────────────────────────────────────────┘  │
│          │                                                  │
│          ▼                                                  │
│   approved                                                  │
│   ┌─────────────────────────────────────────────────────┐  │
│   │  已批准                                             │  │
│   │  - 可以部署                                         │  │
│   │  - 等待执行                                         │  │
│   └─────────────────────────────────────────────────────┘  │
│          │                                                  │
│          ▼                                                  │
│   in_progress                                               │
│   ┌─────────────────────────────────────────────────────┐  │
│   │  部署中                                             │  │
│   │  - 正在执行变更                                     │  │
│   │  - 大表可能需要时间                                 │  │
│   └─────────────────────────────────────────────────────┘  │
│          │                                                  │
│          ▼                                                  │
│   complete / error / closed                                 │
│   ┌─────────────────────────────────────────────────────┐  │
│   │  complete: 成功完成                                 │  │
│   │  error: 部署失败                                    │  │
│   │  closed: 已关闭/取消                                │  │
│   └─────────────────────────────────────────────────────┘  │
│                                                             │
└─────────────────────────────────────────────────────────────┘

创建 Deploy Request #

CLI 创建 #

bash
# 基本创建
pscale deploy-request create my-database feature-branch

# 输出示例
# Deploy request #3 created successfully.
# View at: https://app.planetscale.com/my-org/my-database/deploy-requests/3

Web 控制台创建 #

text
┌─────────────────────────────────────────────────────────────┐
│                    创建 Deploy Request                        │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│   步骤:                                                    │
│                                                             │
│   1. 进入数据库页面                                         │
│   2. 点击 "Branches" 标签                                  │
│   3. 选择开发分支                                          │
│   4. 点击 "Create deploy request"                          │
│                                                             │
│   表单:                                                    │
│   ┌─────────────────────────────────────────────────────┐  │
│   │  From branch: feature/add-users-table               │  │
│   │  To branch: main                                    │  │
│   │                                                      │  │
│   │  Title: Add users table                             │  │
│   │                                                      │  │
│   │  Description:                                        │  │
│   │  Adding users table for authentication feature.     │  │
│   │  Includes email unique index.                       │  │
│   │                                                      │  │
│   │  [Create deploy request]                             │  │
│   └─────────────────────────────────────────────────────┘  │
│                                                             │
└─────────────────────────────────────────────────────────────┘

查看 Deploy Request #

CLI 查看 #

bash
# 列出所有 Deploy Request
pscale deploy-request list my-database

# 输出示例
NUMBER  BRANCH                    STATE          CREATED AT
1       feature/add-users         complete       2024-01-10 10:00:00
2       feature/add-orders        in_progress    2024-01-15 12:00:00
3       hotfix/add-index          pending_review 2024-01-16 09:00:00

# 查看详情
pscale deploy-request show my-database 3

# 查看 Schema 差异
pscale deploy-request diff my-database 3

Web 控制台查看 #

text
┌─────────────────────────────────────────────────────────────┐
│                    Deploy Request 详情                        │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│   Deploy Request #3                                         │
│   feature/add-users → main                                  │
│                                                             │
│   Status: Pending review                                    │
│   Created: 2024-01-16 09:00:00 by alice@example.com        │
│                                                             │
│   Changes:                                                  │
│   ┌─────────────────────────────────────────────────────┐  │
│   │  Tables:                                             │  │
│   │  + users (new table)                                 │  │
│   │                                                      │  │
│   │  Schema:                                             │  │
│   │  + CREATE TABLE users (                              │  │
│   │      id INT AUTO_INCREMENT PRIMARY KEY,              │  │
│   │      email VARCHAR(255) UNIQUE NOT NULL,             │  │
│   │      name VARCHAR(100) NOT NULL,                     │  │
│   │      created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP  │  │
│   │  );                                                  │  │
│   │                                                      │  │
│   │  Indexes:                                            │  │
│   │  + UNIQUE INDEX email ON users(email)                │  │
│   └─────────────────────────────────────────────────────┘  │
│                                                             │
│   Comments:                                                 │
│   ┌─────────────────────────────────────────────────────┐  │
│   │  bob@example.com: Looks good! Ready to deploy.      │  │
│   └─────────────────────────────────────────────────────┘  │
│                                                             │
│   [Approve] [Add comment] [Close]                          │
│                                                             │
└─────────────────────────────────────────────────────────────┘

审核流程 #

审核要点 #

text
┌─────────────────────────────────────────────────────────────┐
│                    审核检查清单                               │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│   Schema 设计审核:                                         │
│   □ 表名是否符合命名规范                                   │
│   □ 列名是否清晰有意义                                     │
│   □ 数据类型是否合适                                       │
│   □ 是否设置了必要的约束                                   │
│   □ 默认值是否合理                                         │
│                                                             │
│   索引审核:                                                │
│   □ 是否添加了必要的索引                                   │
│   □ 索引是否合理                                           │
│   □ 是否有冗余索引                                         │
│                                                             │
│   兼容性审核:                                              │
│   □ 是否影响现有表                                         │
│   □ 是否需要数据迁移                                       │
│   □ 应用代码是否已准备                                     │
│                                                             │
│   性能审核:                                                │
│   □ 变更是否可能影响性能                                   │
│   □ 大表变更是否需要特殊处理                               │
│                                                             │
└─────────────────────────────────────────────────────────────┘

添加评论 #

bash
# CLI 添加评论
pscale deploy-request review my-database 3 --comment "Looks good to me!"

Web 控制台审核 #

text
┌─────────────────────────────────────────────────────────────┐
│                    审核操作                                   │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│   批准变更:                                                │
│   1. 点击 "Approve" 按钮                                   │
│   2. 可选添加批准评论                                      │
│   3. 变更进入可部署状态                                    │
│                                                             │
│   请求修改:                                                │
│   1. 添加评论说明问题                                      │
│   2. 开发者更新分支                                        │
│   3. 重新审核                                              │
│                                                             │
│   拒绝变更:                                                │
│   1. 点击 "Close" 关闭 DR                                  │
│   2. 说明拒绝原因                                          │
│   3. 删除开发分支                                          │
│                                                             │
└─────────────────────────────────────────────────────────────┘

部署变更 #

CLI 部署 #

bash
# 部署 Deploy Request
pscale deploy-request deploy my-database 3

# 输出示例
# Deploying deploy request #3...
# Deployment complete!

部署过程 #

text
┌─────────────────────────────────────────────────────────────┐
│                    部署阶段                                   │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│   阶段 1:验证                                              │
│   ┌─────────────────────────────────────────────────────┐  │
│   │  ✅ 验证 Schema 变更有效性                           │  │
│   │  ✅ 检查是否有冲突                                   │  │
│   │  ✅ 验证权限                                         │  │
│   └─────────────────────────────────────────────────────┘  │
│                                                             │
│   阶段 2:准备                                              │
│   ┌─────────────────────────────────────────────────────┐  │
│   │  🔄 创建备份点                                       │  │
│   │  🔄 准备影子表                                       │  │
│   └─────────────────────────────────────────────────────┘  │
│                                                             │
│   阶段 3:执行                                              │
│   ┌─────────────────────────────────────────────────────┐  │
│   │  🔄 复制数据                                         │  │
│   │  🔄 同步增量变更                                     │  │
│   │  🔄 原子切换                                         │  │
│   └─────────────────────────────────────────────────────┘  │
│                                                             │
│   阶段 4:清理                                              │
│   ┌─────────────────────────────────────────────────────┐  │
│   │  ✅ 清理临时表                                       │  │
│   │  ✅ 更新元数据                                       │  │
│   │  ✅ 完成部署                                         │  │
│   └─────────────────────────────────────────────────────┘  │
│                                                             │
└─────────────────────────────────────────────────────────────┘

监控部署进度 #

bash
# 查看部署状态
pscale deploy-request show my-database 3

# 输出示例
# Number: 3
# Branch: feature/add-users → main
# State: in_progress
# Progress: 45%
# Estimated time: 5 minutes remaining

回滚操作 #

自动回滚 #

text
┌─────────────────────────────────────────────────────────────┐
│                    自动备份                                   │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│   PlanetScale 在部署前自动创建备份:                        │
│                                                             │
│   部署前:                                                  │
│   ┌─────────────┐                                          │
│   │    main     │                                          │
│   │  (当前状态)  │                                          │
│   └──────┬──────┘                                          │
│          │                                                  │
│          │ 自动备份                                         │
│          ▼                                                  │
│   ┌─────────────┐                                          │
│   │  备份点 #1  │                                          │
│   └─────────────┘                                          │
│                                                             │
│   部署后:                                                  │
│   ┌─────────────┐                                          │
│   │    main     │                                          │
│   │  (新 Schema)│                                          │
│   └─────────────┘                                          │
│                                                             │
│   如需回滚:联系支持恢复备份点                              │
│                                                             │
└─────────────────────────────────────────────────────────────┘

手动回滚 #

bash
# 创建回滚分支
pscale branch create my-database rollback-users-table

# 执行反向变更
pscale shell my-database rollback-users-table
mysql> DROP TABLE users;

# 创建回滚 Deploy Request
pscale deploy-request create my-database rollback-users-table

# 部署回滚
pscale deploy-request deploy my-database 4

Deploy Request 最佳实践 #

变更粒度 #

text
┌─────────────────────────────────────────────────────────────┐
│                    变更粒度建议                               │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│   推荐:小而聚焦的变更                                      │
│                                                             │
│   ✅ 好的做法:                                             │
│   DR #1: 添加 users 表                                     │
│   DR #2: 添加 orders 表                                    │
│   DR #3: 添加 users.email 索引                             │
│                                                             │
│   ❌ 不好的做法:                                           │
│   DR #1: 添加 users 表、orders 表、products 表、           │
│          修改 users 表结构、添加 10 个索引...              │
│                                                             │
│   原因:                                                    │
│   - 小变更易于审核                                         │
│   - 小变更风险更低                                         │
│   - 出问题易于定位                                         │
│   - 回滚更简单                                             │
│                                                             │
└─────────────────────────────────────────────────────────────┘

部署时机 #

text
┌─────────────────────────────────────────────────────────────┐
│                    部署时机建议                               │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│   常规变更:                                                │
│   - 工作日工作时间                                         │
│   - 团队可监控                                             │
│   - 便于快速响应问题                                       │
│                                                             │
│   大表变更:                                                │
│   - 低峰期执行                                             │
│   - 预留足够时间                                           │
│   - 提前通知团队                                           │
│                                                             │
│   紧急修复:                                                │
│   - 随时执行                                               │
│   - 确保有人监控                                           │
│   - 准备回滚方案                                           │
│                                                             │
└─────────────────────────────────────────────────────────────┘

常见问题 #

部署卡住 #

text
问题:Deploy Request 一直 in_progress
解决:
  1. 检查变更大小
  2. 大表变更需要更多时间
  3. 查看详细日志
  4. 联系支持

部署失败 #

text
问题:Deploy Request 显示 error 状态
解决:
  1. 查看错误信息
  2. 修复问题
  3. 创建新的 DR
  4. 重新部署

冲突处理 #

text
问题:DR 显示有冲突
解决:
  1. 删除当前开发分支
  2. 从最新的 main 创建新分支
  3. 重新应用变更
  4. 创建新的 DR

下一步 #

现在你已经掌握了 Deploy Request,接下来学习 集成配置,了解如何与第三方服务集成!

最后更新:2026-03-29