1

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插入
一条历史记录。


油头粉面
32 声望3 粉丝

边敲代码边扣脚,嘶~真香


引用和评论

0 条评论