flyway作为数据库迁移的利器,下面简单说说它的使用,本例子是采用maven插件的形式整合flyway。
1. pom.xml配置
<plugins>
<plugin> <groupId>org.flywaydb</groupId>
<artifactId>flyway-maven-plugin</artifactId>
<version>6.2.3</version>
<executions>
<execution>
<phase>generate-sources</phase>
<goals>
<goal>migrate</goal>
</goals>
</execution>
</executions>
<configuration> <driver>com.mysql.cj.jdbc.Driver</driver>
<url>jdbc:mysql://xxxxx:3306/xxx?useUnicode=true</url>
<user>xxxx</user>
<password>xxxxx</password>
<!--<schemas></schemas>-->
</configuration>
</plugin>
</plugins>
2.脚本路径
- 脚本默认路径为classpath:/db/migration
3.脚本命名
- V1__脚本_描述.sql
其中大写V为固定前缀,1表示版本号,可以采用小版本的写法,如1.1,1.2等。
版本号后面跟双下划线__,在后面跟脚本描述,脚本描述之间可以用单下划线_分隔
最后面就是sql后缀。
4.使用原则
- 一旦脚本通过flyway执行后,脚本就不能再修改,如果需要添加sql,只能把sql放到新的版本脚本里面
例如:V1__脚本1.sql已经执行了,那么新的sql只能放到比V1版本号大的脚本里面去,如V1.2__脚本2.sql
或者V2__脚本2.sql。
- flyway首次执行就会生成一个flaway_schema_history表去维护迁移的记录。
里面有个version字段,去表示当前最新的版本号,那么下次执行时flyway就会自动查找
比当前version大的脚本文件去执行。
- flaway_schema_history还有一个checksum字段去校验已经执行过的脚本是否有变化,
如果V1__脚本.sql,已经执行过了,然后修改里面的内容,再次执行flyway就会报错,这就是
为什么一旦执行过的脚本不要去修改的原因。
4 插件命令详解
flyway:clean
清楚数据库的所有表(慎用!!!!)
flyway:baseline
默认情况下如果数据库已经有表了那么首次执行flyway会报错的。需要
先执行baseline,这样flyway就会生成一条version=1的记录表示当前的表的
版本是1。那么脚本的版本号只能从大于1开始命名
flyway:mygrate
数据库迁移,默认会查找版本号比flaway_schema_history#vesion大的脚本去执行
如果有多个,则按照升序的顺序执行。每迁移完一个脚本会往flaway_schema_history插入
一条历史记录。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。