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

MySQL 是世界上最流行的开源关系型数据库管理系统 (RDBMS),但是对 MySQL 数据库做 schema 变更 (schema migration) 还是有点难搞的😅。

本文中,我们盘点一些好用的针对 MySQL 的开源数据库 schema 迁移工具,简单聊一下它们提供的不同的功能和体验。

file

gh-ost

gh-ost 是一个无需触发器的 MySQL 在线 Schema 迁移工具,它是基于触发器的在线 Schema 迁移工具 pt-online-schema-change 的继任者。该工具由 GitHub 开发,并在 2016 年作为开源项目发布。

file

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 以声明方式实现对表定义和模式更改的管理。

file

Skeema 支持基于拉取请求的工作流程,用于模式更改提交、审查和执行。这使团队可以像管理代码更改一样管理 Schema 变更。

Skeema 有一个配套的 SaaS 工具,名为 Skeema Cloud Linter,可自动对模式更改提交和拉取请求进行语法检查。

GitHub 同时使用 Skeema 和 gh-ost 来自动化其 MySQL Schema 迁移。

Liquibase

Liquibase 可以说是这个领域中最知名的产品之一。它基于命令行界面,使用 Java 编写。在 Liquibase 里,schema 迁移基于 Changeset 和 Changelog。可能由于其悠久历史和 Java 根基,最常用的形式是 XML(不过后来添加了 YAML 和 JSON 支持)。

file

使用适当注释也可支持普通 SQL 语句。

file

Flyway

Flyway 是另一个具有悠久历史和庞大客户群的开源项目。其核心是 CLI 和 Java 库。

Flyway 已被 Redgate 收购,但仍保持着开发者至上的初心,这一点在它官网也可以看出来。

file

Liquibase 和 Flyway 在其提供的功能上非常相似。它们之间的关键区别在于目标受众:Liquibase 面向企业客户,而 Flyway 则更注重开发人员友好和易用性。

Bytebase

Bytebase 是一款为研发团队准备的数据库 CI/CD 工具,专为开发者和 DBA 打造,用于协同处理数据库变更。Bytebase 使用 Go 和 TypeScript 编写。

file

Bytebase 提供了一系列可配置的 SQL 语法检查规则,用于检测 SQL 反模式,例如可以约束 NOT NULL。

👻 Bytebase 还专门为 MySQL 在线 Schema 迁移提供了基于 gh-ost 的 GUI。

除了管理数据库变更,Bytebase 还提供带有数据访问控制、动态数据脱敏和审计日志的 SQL 编辑器,以收口查询路径。

file

总结

file


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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/483529.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Jenkins CI/CD 流程

Jenkins CI/CD 流程 这张图稍微更形象一点,上线之前先把代码git到版本仓库,然后通过Jenkins将Java项目通过maven去构建,这是在非容器之前,典型的自动化的一个版本上线流程。那它有哪些问题呢? 如:它的测试环…

Stable Diffusion——常用插件安装与测试(一)

前言 随着Stable Diffusion不断演进,越来越多的开发者开始涉足插件开发。尽管网络上存在大量教程,但它们通常零散分布,逐个学习和查找非常耗时,使人感觉每天都在劳累思考。这里总结了Stable Diffusion常用的插件安装与测试方法。…

Linux篇:开发工具yum/vim/gcc/g++/Makefile/gdb

一. yum:软件包管理器 什么是软件包? 在Linux 下安装软件 , 一个通常的办法是下载到程序的源代码 , 并进行编译 , 得到可执行程序 . 但是这样太麻烦了, 于是有些人把一些常用的软件提前编译好 , 做成软件包 (可以理解成windows 上的安装程序) 放在…

Tomcat 学习之 Servlet

目录 1 Servlet 介绍 2 创建一个 Servlet 3 web.xml 介绍(不涉及 filter 和 listener 标签) 3.1 display-name 3.2 welcome-file-list 3.3 servlet 3.4 session-config 3.5 error-page 4 Tomcat 如何根据 URL 定位到 Servlet 5 执行 Servlet …

Web基础②nginx搭建与配置

目录 一.Nginx概述 1.定义 2.Nginx模块作用 (1)main模块 (2)stream服务模块 (3)邮件服务模块 (4)第三方模块 (5)events模块 (6&#xff…

STM32cubeMX配置FreeRTOS----互斥量

这篇文章为大家介绍FreeRTOS里的 互斥锁。 文章目录 前言一、互斥量的概念二、STM32cubeMX配置互斥量三、相关函数1. 创建互斥量2. 获取互斥量3. 释放互斥量 四、使用互斥量访问共享资源五、递归互斥锁在RTOS里互斥锁是谁获取,谁就释放吗? 总结 前言 一、…

MySQL引擎对决:深入解析MyISAM和InnoDB的区别

欢迎来到我的博客,代码的世界里,每一行都是一个故事 MySQL引擎对决:深入解析MyISAM和InnoDB的区别 前言引擎概述MyISAM:InnoDB: 使用场景使用 MyISAM 的最佳实践:使用 InnoDB 的最佳实践:可能的…

使用Windbg动态调试目标程序去分析异常的两实战案例分享

目录 1、前言 2、案例1:程序退出时弹出报错提示框 2.1、问题说明 2.2、到系统应用程序日志中看系统有没有自动生成dump文件 2.3、将Windbg附加到目标程序上进行动态调试 3、案例2:程序在运行过程中弹出ASSERT断言提示框 3.1、问题说明 3.2、将Wi…

Linux内核中并发与竞争的处理方法之原子操作简介

一. 简介 当我们发现驱动程序中存在并发和竞争的时候一定要处理掉,接下来我们依次来学习一下 Linux 内核提供的几种并发和竞争的处理方法。 本文学习Linux内核提供的一种处理并发与竞争的方法:原子操作。 二. 原子操作简介 原子操作就是指不能再进一步…

net反射

1.1 查找dll文件 Load需要把dll放到程序当前路径加载,也可以读取字符串形式。LoadFrom需要写全路径,如果test1.dll引用了test2.dll,同时也会加载test2.dll进来。LoadFile不会加载test2.dll。 Assembly assembly1 Assembly.Load("DllTe…

Gmail邮箱群发邮件的技巧?邮箱怎么绑定?

Gmail邮箱注册教程指南?如何注册新的Gmail邮箱帐户? Gmail邮箱作为谷歌推出的邮件服务,以其高效、稳定和便捷的特性受到广大用户的喜爱。然而,如何在Gmail中进行有效的群发邮件,接下来,蜂邮将给大家介绍一…

盘点那些世界名校计算机专业采用的教材

清华、北大、MIT、CMU、斯坦福的学霸们在新学期里要学什么?今天我们来盘点一下那些世界名校计算机专业采用的教材。 书单目录 1.《深入理解计算机系统》(原书第3版)2. 《算法导论》(原书第3版)3. 《计算机程序的构造和…