系列文章目录

主要是用来记录每次迭代的版本sql的表结构的变动.在部署某个版本时,能够快找到这个版本对应的sql,避免出现表结构的错误

Flyway是独立于数据库的应用、管理并跟踪数据库变更的数据库版本管理工具。用通俗的话讲,Flyway可以像Git管理不同人的代码那样,管理不同人的sql脚本,从而做到数据库同步。


文章目录

  • 系列文章目录
  • 一、flyway是什么?
    • 相关链接
  • 二、使用
    • 1.准备
    • 2.命令
    • 3.使用实例
      • 流程1
      • 流程2
  • 三、问题

一、flyway是什么?

flyway是一个数据库迁移工具.使用version来记录每一次脚本的执行.

相关链接

官网链接

文档链接:
flyway使用
简书flyway使用教程
原理
flyway中文教程

二、使用

1.准备

<dependency><groupId>org.flywaydb</groupId><artifactId>flyway-core</artifactId><version>7.9.2</version>
</dependency>

yml配置

flyway配置详解

flyway.baseline-description对执行迁移时基准版本的描述.
flyway.baseline-on-migrate当迁移时发现目标schema非空,而且带有没有元数据的表时,是否自动执行基准迁移,默认false.
flyway.baseline-version开始执行基准迁移时对现有的schema的版本打标签,默认值为1.
flyway.check-location检查迁移脚本的位置是否存在,默认false.
flyway.clean-on-validation-error当发现校验错误时是否自动调用clean,默认false.
flyway.enabled是否开启flywary,默认true.
flyway.encoding设置迁移时的编码,默认UTF-8.
flyway.ignore-failed-future-migration当读取元数据表时是否忽略错误的迁移,默认false.
flyway.init-sqls当初始化好连接时要执行的SQL.
flyway.locations迁移脚本的位置,默认db/migration.
flyway.out-of-order是否允许无序的迁移,默认false.
flyway.password目标数据库的密码.
flyway.placeholder-prefix设置每个placeholder的前缀,默认${.
flyway.placeholder-replacementplaceholders是否要被替换,默认true.
flyway.placeholder-suffix设置每个placeholder的后缀,默认}.
flyway.placeholders.[placeholder name]设置placeholder的value
flyway.schemas设定需要flywary迁移的schema,大小写敏感,默认为连接默认的schema.
flyway.sql-migration-prefix迁移文件的前缀,默认为V.
flyway.sql-migration-separator迁移脚本的文件名分隔符,默认__
flyway.sql-migration-suffix迁移脚本的后缀,默认为.sql
flyway.tableflyway使用的元数据表名,默认为schema_version
flyway.target迁移时使用的目标版本,默认为latest version
flyway.url迁移时使用的JDBC URL,如果没有指定的话,将使用配置的主数据源
flyway.user迁移数据库的用户名
flyway.validate-on-migrate迁移时是否校验,默认为true.

Spring Boot 将会自动管理Flyway的启动和运行。然后Flyway会默认在你的项目的CLASSPATH路径下的db/migration目录下(在我们的项目一般就是src/main/resources/db/migration里面)查找SQL脚本。将你的SQL脚本写完然后放入此路径下后就可以运行你的项目,Spring会自动创建Flyway的Bean来处理你的脚本。

2.命令

官方api

  1. Migrate(迁移):将schema更新到最新的版本并且如果不存在flyway_schema_history表就会创建一个。
    它是flyway工作流程的核心。它将扫描文件系统或您的类路径以获取可用的迁移。它将它们与已应用于数据库的迁移进行比较,如果发现任何差异,它将迁移数据库以缩小差距。
  2. clean(删除):删除已配置的schema中所有对象,当然,不要对生产DB操作,毕竟有点类似删库跑路。。。
  3. info(信息):打印所有的Migration的信息,包含状态,通过info可以知道哪些Migration已经应用了,哪些处于pending状态
  4. Validate(验证):验证将要更新的migrations是否与已更新的migration有冲突,有点类似于代码合并时git会检查是否有冲突
  5. Undo(撤销):撤消最近应用的版本迁移。可指定撤销的最终版本。
  6. BaseLine(基准线):相对于Migrate来说,它不再是从最初开始迁移,而是先将某数据库作为基准线,然后迁移相对此数据库还未更新的migrations
  7. repaire(修复):修复flyway_schema_history表

3.使用实例

流程1

1、将flyway-core-2.3.jar放到项目lib中,下载地址:http://flywaydb.org/getstarted/download.html

2、在src目录下建立保存sql版本文件的路径:src/db/migration,flyway默认查找路径,可以改,但没必要。

3、在sql版本文件路径中增加sql文件,命名规则,如:V1__2014_4_13.sql ,V开头+版本号+双下划线+描述,描述中可以有下划线,后缀为sql。别问能不能修改这个规则,否则,我咬你。

4、增加flyway的java类,有命令行工具,但还是java类用起来方便,如下:


package com.cms.flyway;import java.io.IOException;
import java.util.Properties;import com.googlecode.flyway.core.Flyway;public class FlywayApp {// 读取数据库配置参数private static Properties config = new Properties();static {try {config.load(Thread.currentThread().getContextClassLoader().getResourceAsStream("activerecord.properties"));} catch (IOException e) {e.printStackTrace();}}// 执行数据库版本升级public static void migration() {// Create the Flyway instanceFlyway flyway = new Flyway();// Point it to the databaseflyway.setDataSource(config.getProperty("com.et.ar.ActiveRecordBase.url"), config.getProperty("com.et.ar.ActiveRecordBase.username"), config.getProperty("com.et.ar.ActiveRecordBase.password"));flyway.setInitOnMigrate(true);// Start the migrationflyway.migrate();}
}

5、在服务器启动的时候或者定时器 执行该类的migration()方法即可。

6、第一次执行会生成一个专门存放数据库schema_version的表

7、以后数据库有了新的改动,导出新版本sql文件(如:mysqldump -u -p databasename>/xx.sql)改为新版本命名文件放到db.migration路径下,flyway会自动帮你更新数据库版本的。

流程2

流程
1、 首先配置好flyway的基本信息后,运行项目,会在数据库表中默认新建一个数据表用于存储flyway的运行信息,默认的数据库名:flyway_schema_history

2、 紧接着Flyway将开始扫描文件系统或应用程序的类路径进行迁移。然后,Flyway的数据迁移将基于对用sql脚本的版本号进行排序,并按顺序应用:

可以看到执行数据库表后在checksum中储存一个数值,用于在之后运行过程中对比sql文件执行是否有变化。

注意:
flyway在执行脚本时,会在源数据表中检查checksum值,并确定上次运行到哪一个脚本文件,本次执行时从下一条脚本文件开始执行。所以编写脚本的时候不要去修改原有的脚本内容,并且新的脚本版本号要连续

集成SpringBoot
1.添加依赖

<dependency>
<groupId>org.flywaydb</groupId>
<artifactId>flyway-core</artifactId>
<version>5.1.1</version>
</dependency>添加插件:
<plugin>
<groupId>org.flywaydb</groupId>
<artifactId>flyway-maven-plugin</artifactId>
<version>5.1.1</version>
</plugin>

2.命名规范
sql 脚本存放目录:src/main/resources/db/migration
对应一个程序版本的多个脚本,从1开始,比如1.0.9版本,有多个任务:张三负责a任务(tapd号为1111111),李四负责b任务(tapd号为222222),他们的任务都涉及到db更新他们会分别创建两个脚本:
V1.0.9.0.1__1111111.sql
V1.0.9.0.2__222222.sql
说明:V大写,中间是两个下划线(__)

三、问题

1、可以基于环境变量,实现不同的环境,做不同的初始化脚本吗?
基于我们的配置中 心,可以对flyway.locations配置进行修改,不同环境的初始化脚本可以放到不同的目录下。

2、初始化数据过程会发生错误回滚?
每 一个sql 文件会有 一个单独的事物,如果单个文件中发 生错误,单个文件的操作会回滚, 比如有1、2、3个 文件,第 二个文件发生错误,第二个文件所有操作将会回滚,第三个文件不会执行。但: Unfortunately, today only DB2, PostgreSQL, Derby, EnterpriseDB and to a certain extent SQL Server support DDL statements inside a transaction。 所以,建议不要把ddl 文件和dml语句句放到同 一个文件 里,避免不必要的麻烦。

3、多个节点能够并行执行migration吗?
当然可以!Flyway使用数据库锁机制(locking technology of your database)来协调多个节点,从而保证多套应用程序可同时执行migration,而且集群控制也可做配置。


flyway(数据库迁移工具)相关推荐

  1. 数据库迁移工具(一)

    数据库迁移工具(一) Flyway定义数据库的迁移 Flyway版本:5.2.4 <dependency><groupId>org.flywaydb</groupId&g ...

  2. Flyway 数据库版本管理控制

    Flyway 数据库版本管理控制 Flyway 是一个用Java编写的开源数据库版本管理工具,或者说是数据库结构变更工具,主要用于帮助开发和运维更容易地管理数据库演进过程中的各个版本. Maven 所 ...

  3. 不同库表数据库迁移工具_Microsoft提供的数据库迁移助手工具概述

    不同库表数据库迁移工具 This article gives the overview of the Database Migration Assistant Tool to access, plan ...

  4. 没有契合的数据库迁移工具,用pymysql实现一个

    版本迭代少不了数据迁移,python有自己的数据库迁移工具migrate.如果有的是其它开发语言,或者没有契合的迁移工具. 怎么自己做一个? 环境说明 项目开发语言:java 数据库: mysql 迁 ...

  5. Alembic数据库迁移工具使用

    Flask下数据库迁移 背景 在很多时候,在我们设计好模型之后,又需要进行一定的改变和更新数据操作:最直接的方式就是删除原来的旧表,但我们之前的数据也会删除:究其原因是我们不能精确记住每个修改和对应D ...

  6. python数据库迁移命令_Python 数据库迁移工具 Alembic

    Alembic 是一款轻量型的数据库迁移工具,它与 SQLAlchemy 一起共同为 Python 提供数据库管理与迁移支持. Alembic 的应用 Alembic 使用 SQLAlchemy 作为 ...

  7. flyway数据库版本控制

    一.Flyway简介 Flyway是一款数据库迁移(migration)工具.简单点说,就是在你部署应用的时候,帮你执行数据库脚本的工具.Flyway支持SQL和Java两种类型的脚本,你可以将脚本打 ...

  8. sql脚本对比工具_Java开发中用到的数据库迁移工具(flyway)

    什么是数据库版本管理? 任何web软件和应用程序都需要强大的数据库管理工具,因此开发者选择一款合适的数据库管理工具尤为重要.本文列出了几款好用的数据库管理工具(有些并非开源或免费),以供开发者们参考选 ...

  9. Spring Boot学习总结(27)—— Spring Boot中两个数据库迁移工具Liquibase和Flyway的比较

    前言 当您需要使用Java创建Web应用程序或API时,可以使用RESTful,SOAP或GraphQL.无论您是查看同步HTTP,异步还是反应式,队列中的消息或来自Kafka的事件,都很难超越Spr ...

  10. 挺带劲!这款开源数据库迁移工具超牛逼

    点击下方公众号「关注」和「星标」 回复"1024"获取独家整理的学习资料! 迁移数据库可以说是日常工作中的家常便饭,不过,如果一不小心把数据库搞炸了,那就麻烦大了(搞不好就得背锅了 ...

最新文章

  1. Eclipse 导入逆向工程
  2. ORA-29339错误解决办法
  3. 数据库IN查询参数化改造的方法
  4. .Net Core使用Ocelot网关(一) -负载,限流,熔断,Header转换
  5. mysql+全文本检索的列,mysql索引
  6. 开发人员提升自己的四种方式
  7. CTO 离职、研发变动,百度外卖与饿了么组织架构融合公布
  8. 基于Arduino的循迹小车
  9. 全面了解量化风险管理
  10. 2022年工作日节假日数据
  11. oracle的imp导入数据,初识oracle-imp导入
  12. matlab 7y30,屏幕及音响表现出众_华硕 灵焕3(M3 7Y30/8GB/256GB)_笔记本评测-中关村在线...
  13. RT-Thread柿饼控件(2)-- Button
  14. 【Python】大数据挖掘课程作业3——使用朴素贝叶斯分类对B站评论进行分析
  15. python支持复数以及相关的运算吗_python怎么实现复数运算
  16. 微信小程序开发部署上线流程
  17. 杨老师课堂之JavaScript定时器_农夫山泉限时秒杀案例
  18. 如何正确地在vm虚拟机中安装Linux 显卡
  19. 关于python语句p p_关于 Python 语句 P=-P ,哪个选项的描述是正确的?_纳税实务答案_学小易找答案...
  20. MetaSelector:基于用户级自适应模型选择的元学习推荐

热门文章

  1. wps中图片怎么居中_Word文档技巧—文档中图片批量居中显示
  2. 文件和文件之间的 相对路径 绝对路径的访问(之前总是容易忘记)
  3. 模仿电影中黑客电脑界面,CMD装逼代码
  4. 关查找我的iphone时显示服务器连接超时,iPhone 屏幕镜像无法关闭,一直显示“正在查找 Apple TV”怎么办?...
  5. python创建单行文本框_HTML单行文本框
  6. Mybatis Plus
  7. github加速脚本
  8. 当程序员具备了抽象思维
  9. matlab小波变换,图像处理
  10. Drag Drop 入门介绍