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