mysql 表结构版本管理_数据库表结构怎么进行版本管理?(这个工具你值得拥有!)...

数据库表结构怎么进行版本管理?(这个工具你值得拥有!)

前言

新功能开发了好久终于通过测试准备上线了,没想到在生产环境一运行直接报错了,一查是这次新功能开发增加了好几张表,然而却没有同步到线上数据库,不得不说这失误也太低级了吧!

为了防止再次发生类似问题,能否通过程序自动帮助我们完成数据库表结构的版本管理呢?

目录

为什么需要对数据库迁移进行版本管理?

Flyway原理浅析

SpringBoot项目集成Flyway

总结

为什么需要对数据库迁移进行版本管理?

一个项目在通常情况下都是多人协作开发,我做这个功能、你做那个功能,因为有非常成熟的版本管理工具如Git和SVN来对代码进行版本管理,所以一般在代码同步上不会出什么问题。

但是我回想了一下,在数据库同步层面经常会发生一些小问题:

比如我在做新功能时在本地数据库新建了一张表,功能做完之后我将代码提交到主干分支;另外一个程序员小伙伴同步最新代码之后在本地就会跑不起来,因为他电脑的本地数据库并没有我新建的这张表。怎么办?我手动将建表语句发给他,他再手动执行一遍,这是人少的情况,人多的情况下都不知道该找谁要表结构?

再比如一般我们开发项目会有集成开发、测试和生产3套运行环境,每次发版我们先要把数据库表结构的变动在集成开发环境执行一遍,没问题再转到测试环境,最后上线时再到生产环境。

先不说这种同步数据库的方式累不累人,在开发环境还每个开发可以自己去同步自己改动的部分,可是到了生产环境所有的数据库结构变动都被混合到了一起,那么我们该怎么确定每个变动的先后顺序呢?

通过以上两个场景可以看到要在多人和多环境之间进行数据库表结构的同步是非常麻烦且容易出错的。

Flyway原理浅析

其实市面上支持对数据库迁移进行版本管理的工具还挺多,就Java方面来说有Flyway、Liquibase等开源工具。对比了一下两者的情况,Liquibase功能强大,支持XML、JSON、YAML、SQL4种配置方式,但需要一定的学习成本;Flyway相对则更加小巧简单,基本上可以做到开箱即用。

我认为一般中小型项目使用Flyway完全可以满足需求,大型项目或是企业级的项目使用Liquibase更合适。

这里我们主要介绍一下Flyway这个工具。

Flyway使用一张元数据表flyway_schema_history来记录每次数据库迁移的历史记录。

Flyway会随着程序启动,从而开始进行数据库的迁移工作:

如果是首次执行,Flyway会先去扫描指定的文件路径或者是在classpath下寻找迁移文件,迁移文件可以是SQL文件也可以是Java类,这些迁移文件将按照特定的迁移版本号进行排序,然后将依次被执行。

如果是非首次执行,程序会首先检查迁移的历史记录,如果迁移文件的版本号小于当前数据库的版本号,那么这些迁移文件将不会被执行,所以每次我们新建迁移文件时版本号都必须大于数据库当前版本号。

在Flyway中,迁移文件会被分成3种类型:版本迁移、撤销迁移和可重复迁移。

1、版本迁移

其实大部分的迁移都属于版本迁移,每个版本迁移都应有一个唯一的版本号、一段对本次迁移所改动的描述和一个用于校验文件完整性的摘要值,所有的版本迁移都会且仅会被按序执行一次。

2、撤销迁移

撤销迁移的作用与版本迁移正好相反,主要作用是将与之前相同版本的版本迁移所产生的迁移效果撤销。

比如说V1版本迁移创建了一张test表,那么撤销迁移U1所做的就是drop掉test表。

特别注意的是:对于撤销迁移一定要慎重,因为通常撤销迁移包含drop、delete、truncate等具有破坏性的操作,所以做撤销迁移之前最好能够备份一下数据。

3、可重复迁移

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值