用 Bytebase 做数据库 schema 迁移

数据库 schema 迁移指修改管理数据库结构的变更,包括为数据库添加视图或表、更改字段类型或定义新约束。Bytebase 提供了可视化 GUI 方便迁移数据库 schema,本教程将展示如何使用 Bytebase 为 schema 迁移配上 SQL 审核,自定义审批流,发布策略,指定发布时间等功能。

功能

Bytebase 提供社区版、专业版和企业版。更进阶的版本解锁了更多可以搭配迁移 schema 模式的功能。

  • 入门 - 自动 SQL 审核(社区版、专业版和企业版)
  • 进阶 - 发布策略(专业版和企业版)
  • 高阶 - 自定义审批流(企业版)

准备工作

运行 Docker,并启动 Bytebase 的 Docker 容器:

复制代码
docker run --init \
  --name bytebase \
  --restart always \
  --publish 5678:8080 \
  --health-cmd "curl --fail http://localhost:8080/healthz || exit 1" \
  --health-interval 5m \
  --health-timeout 10s \
  --volume ~/.bytebase/data:/var/opt/bytebase \
  bytebase/bytebase:2.11.1 \
  --data /var/opt/bytebase \
  --port 8080

通过 Docker 启动 Bytebase 后,使用 localhost:5678 访问主页,请先注册一个账户,此账户将自动被授予工作空间的管理员角色。

入门 - 自动 SQL 审核 + 自动发布(社区版)

  1. 在环境的 Test 和 Prod 页面中,可以分别看到:
  • 发布策略为「自动发布」。除非出现警告或错误,否则工单成功创建后将自动发布。
  • 生产环境上启用了 SQL 审核,并使用示例策略。
  1. 点击 Prod 环境下的「SQL Review Sample Policy」 可进入 SQL 审核模板,此模板中开启了列的「强制非空约束」策略,我们尝试违反看看。
  1. 前往 Sample Project,我们为 Prod 环境的 employee 表添加空的 Email 列。

    ALTER TABLE employee.employee
    ADD Email varchar(255);

  2. 工单创建后,SQL 审核将自动运行,并出现了「强制非空约束」警告。

  1. 给 SQL 加上 NOT NULL 约束后即可通过 SQL 审核,工单将自动发布。

    ALTER TABLE employee.employee
    ADD Email varchar(255) NOT NULL;

  2. 发布完成后可以在数据库 employee 的变更历史中看到变更记录和前后 schema 差异。

进阶:指定发布时间 + 手动发布(专业版)

使用专业版,你会获得两个额外的功能(出于 demo 需要,这里我们使用免费的 14 天的企业试用版):

  1. 特定角色发布

可以指定多个预定义的角色来手动发布变更。在环境的 Prod 页面中,选择特定手工发布,勾选允许发布变更的角色,点击更新。

  1. 指定发布时间

可以指定特定时间来发布变更。前往 Sample Project,我们为 Prod 环境的 employee 表添加 Country 列。

复制代码
ALTER TABLE employee.employee
ADD Country varchar(255) NOT NULL;

可在工单页面指定发布时间。

高阶:自定义审批流 + 手动发布(企业版)

如果你希望审核流程更加定制化,比如基于 SQL 语句类型,变更影响的行数等,可以在「自定义审批」中配置(友情提醒:请先在「实例」页面为需要使用自定义审批的实例分配证书。否则自定义审批将无法启用)。

  1. 前往设置⚙️ > 自定义审批。DDL 高风险的审批流设置为 Project Owner -> DBA。
  1. 前往设置⚙️ > 风险中心。添加一条「生产环境的 DDL 语句,默认为高风险」的规则。
  1. 前往设置⚙️ > 成员,添加一个 DBA 角色,因为稍后需要 DBA 批准发布。

  2. 进入环境 Prod ,现在你可以解锁第三个选项了!即由自定义审批流的最后一个审批人手动发布策略。选择该选项。

  1. 前往 Sample Project,我们给 Test 和 Prod 数据库分别加一列 City。

    ALTER TABLE employee.employee
    ADD City varchar(255) NOT NULL;

  2. 创建工单,审批流将自动匹配,此为第一步设置的 Project Owner -> DBA 审批,批准后将会自动发布。

总结

你现在已经了解了如何使用 Bytebase 进行数据库 schema 迁移。Bytebase 还提供更多功能,欢迎来试试:

  • GitOps,观察 Git 代码推送事件并触发 schema 迁移
  • 批量变更,在单个工作流中更改多个数据库
  • 分支,使用类似于 Git 的分支协作进行 schema 变更
  • 变更列表,按顺序编排和发布变更,或将其导出以离线执行

💡 更多资讯,请关注 Bytebase 公号:Bytebase

相关推荐
souyuanzhanvip3 分钟前
ServerBox v1.0.1316 跨平台 Linux 服务器管理工具
linux·运维·服务器
山岚的运维笔记8 分钟前
SQL Server笔记 -- 第18章:Views
数据库·笔记·sql·microsoft·sqlserver
文静小土豆11 分钟前
Docker 与 containerd 代理配置详解:镜像拉取速度慢的终极解决方案
运维·docker·容器
胖虎11 小时前
Git 一个本地仓库同时推送到两个远程仓库(详细教程)
git·多远程仓库·双远程仓库·git双远程·git备份
roman_日积跬步-终至千里1 小时前
【LangGraph4j】LangGraph4j 核心概念与图编排原理
java·服务器·数据库
汇智信科1 小时前
打破信息孤岛,重构企业效率:汇智信科企业信息系统一体化运营平台
数据库·重构
野犬寒鸦1 小时前
从零起步学习并发编程 || 第六章:ReentrantLock与synchronized 的辨析及运用
java·服务器·数据库·后端·学习·算法
HalvmånEver1 小时前
Linux:线程互斥
java·linux·运维
JY.yuyu2 小时前
Docker常用命令——数据卷管理 / 端口映射 / 容器互联
运维·docker·容器
晚霞的不甘3 小时前
揭秘 CANN 内存管理:如何让大模型在小设备上“轻装上阵”?
前端·数据库·经验分享·flutter·3d