头疼管理 MySQL 数据库 Schema?开源工具大盘点!

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

相关推荐
woxihuan1234566 小时前
SQL删除数据时存在依赖关系_设置外键级联删除ON DELETE
jvm·数据库·python
东风破1376 小时前
DM8达梦共享存储集群DSC搭建步骤
数据库·学习·dm达梦数据库
雪碧聊技术6 小时前
当数据库字段数大于Java实体类属性数时,MyBatis还能映射成功吗?一文详解
数据库·自动映射·mybatis映射机制·java实体类·宽容映射机制
Jetev6 小时前
如何确定SQL字段是否为空_使用IS NULL与IS NOT NULL
jvm·数据库·python
m0_702036536 小时前
mysql如何处理不走索引的OR查询_使用UNION ALL优化重写
jvm·数据库·python
代钦塔拉7 小时前
Qt4 vs Qt5 带参数信号槽的连接方式详解
开发语言·数据库·qt
2401_846339567 小时前
MySQL在云环境如何选择存储类型_SSD与高性能云盘配置建议
jvm·数据库·python
zhaoyong2228 小时前
SQL如何统计每个用户的首次行为时间_MIN聚合与分组
jvm·数据库·python
2501_901006478 小时前
C#怎么实现配置热更新 C#如何在运行时动态刷新配置文件不需要重启程序【技巧】
jvm·数据库·python
m0_470857648 小时前
HTML怎么创建响应式图片备选方案_HTML srcset与sizes结构【详解】
jvm·数据库·python