flyway
是什么
数据库版本管理工具
为什么
- 自己写的SQL忘了在所有环境执行
- 别人写的SQL我们不能确定是否都在所有环境执行了
- 有人修改了已经执行过的SQL,期望再次执行
- 需要新增环境做数据迁移
- 每次发版需要手动控制先发DB版本,再发布应用版本
怎么做
集成依赖
1 | <dependency> |
在项目resources中添加目录
1 | cd 你的目录/resources |
在项目配置中添加flyway配置
1 | spring: |
命名规范
示例:
1 | V1.1.__description.sql |
prefix:可配置,前缀标识,默认值 V 表示 Versioned,R 表示 Repeatable;
Version:标识版本号,由一个或多个数字构成,数字之间的分隔符可用点.或单下划线_;
separator:分隔符,默认是双下划线;
description:描述信息,文字之间可以用单下划线或空格分隔
suffix:可配置,后续标识,后续标识,默认为 .sql;
Versioned migration 用于版本升级,每个版本都有唯一的版本号并只能 apply 依次。(也就是V开头的)
Repeatable migration 是指可重复加载的 migration,可以重复修改内容使用一旦脚本的 checkksum 有变动,flyway 就会重新应用该脚本,它并不用于版本更新,这类的 migration 总是在 versioned migration 执行之后才被执行(R开头的)
spring配置
1 | flyway: |
坑
-
坑一:命名SQL文件问题
没有按标准命名,导致执行不成功
-
坑二:执行失败的文件,再次启动时执行不了,可以删除数据库中
flyway_schema_history
表最后一条数据,然后再重启 -
坑三:云家园装配后不生效,但maven可以生效,目前还在解决中。
竞品对比
nextep(开源)
http://www.nextep-softwares.com/
dbdeploy(开源)
http://dbdeploy.com/
Liquibase(开源)
http://www.liquibase.org/
Post Facto(开源)
http://www.post-facto.org/
下面是red gate公司的商业软件
SQL Source Control (商业软件)
http://www.red-gate.com/products/SQL_Source_Control/index.htm
参考文档
- 官网
- “ https://www.jianshu.com/p/567a8a161641"
- “ https://blog.csdn.net/chenleiking/article/details/80691750"
- “ https://segmentfault.com/a/1190000038960756"
- “ https://juejin.cn/post/6844903802215071758"
- “ https://blog.csdn.net/qq_33430083/article/details/105508025"
- “ https://blog.51cto.com/u_15076233/4273411"
- “ https://www.saoniuhuo.com/article/detail-30226.html"
- 这个用的比较新的flyway
- 知乎的这篇原理介绍还可以
- 知乎的这篇讨论也有点意思,尤其是其中的其他链接
- 这是要删库跑路的节奏啊
- 这篇讲的实战中k8s结合flyway很高大上
- 这篇中idea新建项目及sql文件命名讲的不错
- 这就是我遇到的一个坑,自己创建映射目录时没注意
- 这篇值得深入研究 比较数据版本控制工具-2020
- 几个数据库的版本控制工具
- 数据库版本控制工具介绍