头疼管理 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

相关推荐
十叶知秋25 分钟前
【jmeter】jmeter的线程组功能的详细介绍
数据库·jmeter·性能测试
瓜牛_gn2 小时前
mysql特性
数据库·mysql
奶糖趣多多3 小时前
Redis知识点
数据库·redis·缓存
CoderIsArt4 小时前
Redis的三种模式:主从模式,哨兵与集群模式
数据库·redis·缓存
师太,答应老衲吧6 小时前
SQL实战训练之,力扣:2020. 无流量的帐户数(递归)
数据库·sql·leetcode
Channing Lewis7 小时前
salesforce case可以新建一个roll up 字段,统计出这个case下的email数量吗
数据库·salesforce
毕业设计制作和分享8 小时前
ssm《数据库系统原理》课程平台的设计与实现+vue
前端·数据库·vue.js·oracle·mybatis
ketil278 小时前
Redis - String 字符串
数据库·redis·缓存
Hsu_kk9 小时前
MySQL 批量删除海量数据的几种方法
数据库·mysql
编程学无止境9 小时前
第02章 MySQL环境搭建
数据库·mysql