MySQL 是世界上最流行的开源关系型数据库管理系统 (RDBMS),但是对 MySQL 数据库做 schema 变更 (schema migration) 还是有点难搞的😅。
本文中,我们盘点一些好用的针对 MySQL 的开源数据库 schema 迁移工具,简单聊一下它们提供的不同的功能和体验。
gh-ost
gh-ost 是一个无需触发器的 MySQL 在线 Schema 迁移工具,它是基于触发器的在线 Schema 迁移工具 pt-online-schema-change 的继任者。该工具由 GitHub 开发,并在 2016 年作为开源项目发布。
gh-ost: GitHub 的 Online Schema Transmogrifier/Transfigurator/Transformer/Thingy
传统的在线 schema 迁移方案通常涉及长时间维护窗口或需要将数据库脱机。gh-ost 旨在通过提供非阻塞和在线模式更改解决方案来解决这些限制。
所有现有的在线模式更改工具操作方式类似:它们创建一个和原始表相似的 ghost (幽灵) 表,将该表迁移为空,逐步从原始表复制数据到 ghost 表,同时发布正在进行中的更改(对表应用任何 INSERT, DELETE, UPDATE)到 ghost 表。最后,在恰当的时候,他们用 ghost 表替换原始表。gh-ost 使用相同的模式,但是它不同于所有现有工具,因为它不使用触发器,而是利用 MySQL binlog 捕获表更改,并异步地将其应用于 ghost 表之上。
Skeema
Skeem 是一个用于 MySQL 和 MariaDB 的 Schama 管理系统。它通过纯 SQL 以声明方式实现对表定义和模式更改的管理。
Skeema 支持基于拉取请求的工作流程,用于模式更改提交、审查和执行。这使团队可以像管理代码更改一样管理 Schema 变更。
Skeema 有一个配套的 SaaS 工具,名为 Skeema Cloud Linter,可自动对模式更改提交和拉取请求进行语法检查。
GitHub 同时使用 Skeema 和 gh-ost 来自动化其 MySQL Schema 迁移。
Liquibase
Liquibase 可以说是这个领域中最知名的产品之一。它基于命令行界面,使用 Java 编写。在 Liquibase 里,schema 迁移基于 Changeset 和 Changelog。可能由于其悠久历史和 Java 根基,最常用的形式是 XML(不过后来添加了 YAML 和 JSON 支持)。
使用适当注释也可支持普通 SQL 语句。
Flyway
Flyway 是另一个具有悠久历史和庞大客户群的开源项目。其核心是 CLI 和 Java 库。
Flyway 已被 Redgate 收购,但仍保持着开发者至上的初心,这一点在它官网也可以看出来。
Liquibase 和 Flyway 在其提供的功能上非常相似。它们之间的关键区别在于目标受众:Liquibase 面向企业客户,而 Flyway 则更注重开发人员友好和易用性。
Bytebase
Bytebase 是一款为研发团队准备的数据库 CI/CD 工具,专为开发者和 DBA 打造,用于协同处理数据库变更。Bytebase 使用 Go 和 TypeScript 编写。
Bytebase 提供了一系列可配置的 SQL 语法检查规则,用于检测 SQL 反模式,例如可以约束 NOT NULL。
👻 Bytebase 还专门为 MySQL 在线 Schema 迁移提供了基于 gh-ost 的 GUI。
除了管理数据库变更,Bytebase 还提供带有数据访问控制、动态数据脱敏和审计日志的 SQL 编辑器,以收口查询路径。
总结
💡 更多资讯,请关注 Bytebase 公号:Bytebase