zoukankan      html  css  js  c++  java
  • 使用Flyway来管理数据库版本

    使用Flyway来管理数据库版本

    Flyway是什么

    Flyway是一款数据库迁移(migration)工具。
    它可以帮助我们在不同环境保持数据库的同步,减少手工操作,避免数据导入的顺序错误,同时也减少了遗漏的机会。
    flyway可以集成在项目中,可以与Spring 框结合。在项目发版时,自动执行数据库脚本,无需人为执行数据库同步操作。

    就目前而言,
    我们部署应用的流程大概是这样的:

    开发人员将应用程序打包、按顺序汇总并整理数据库升级脚本DBA拿到数据库升级脚本检查、备份、执行,以完成数据库升级应部署人员拿到应用部署包,备份、替换,以完成应用程序升级
    引入Flyway之后的应用部署流程大概是这样的:

    开发人员将应用程序打包应部署人员拿到应用部署包,备份、替换,以完成应用程序升(Flyway将自动执行升级/备份脚本)

    Flyway的介绍

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

    2、支持的数据库类型:
    Oracle, SQL Server, SQL Azure, DB2, DB2 z/OS, MySQL (including Amazon RDS), MariaDB, Google Cloud SQL, PostgreSQL (including Amazon RDS and Heroku), Redshift, Vertica, H2, Hsql, Derby, SQLite, SAP HANA, solidDB, Sybase ASE and Phoenix。

    3、sql脚本的命名规范:
    V+版本号(版本号的数字间以".“或”_"分隔开)+双下划线(用来分隔版本号和描述)+文件描述+后缀名,例如:V2017.9.30__Update.sql。

    4、Flyway读取sql脚本的默认位置:
    项目的源文件夹下的db/migration目录。

    5、指令:
    一共就6个基本指令:migrate、clean、info、validate、baseline、repair。

    Flyway的命令

    Migrate:
    manven命令 mvn flyway:migrate
    将数据库迁移到最新版本。当数据如果不存在,Flyway 将自动创建示模式历史表。
    20210706164823
    Migrate是flyway工作流程的核心。它将扫描文件系统或您的类路径以获取可用的迁移。它将它们与应用于数据库的迁移进行比较。如果发现任何差异,它将迁移数据库以缩小差距。

    Migrate最好在应用程序启动时执行,以避免数据库与代码期望之间的任何不兼容性。
    示例 1: 我们有Migrate可用到版本 9, 数据库在版本 5 。Migrate将按顺序应用迁移 6、7、8 和 9。

    示例 2: 我们有Migrate可用到版本 9,数据库位于第 9 版。迁移不起任何作用。
    Clean:

    manven命令 mvn flyway:clean
    

    20210706165256
    Clean可以很好的帮助开发和测试。 它将有效地给你一个全新的开始,通过Clean来清除你的数据库。 所有对象(表、视图、过程…)将会删除。

    不用说: 不要对生产数据库使用!
    Info:

    manven命令 mvn flyway:info
    

    20210706165611
    打印有关所有Migrate的详细信息和状态信息。
    Info让你知道你的立场。一目了然,您就会看到哪些Migrate已经应用,哪些其他Migrate仍在等待执行中,何时执行,以及它们是否成功。
    Validate:

    manven命令 mvn flyway:validate
    

    20210706165928
    用于校验,范围包括已升级的脚本是否改名,已执行的版本内容是否修改。所有针对已执行的版本进行的改动都会导致校验失败。

    执行migrate会自动进行校验,如果失败将不会做任何的migrate。

    flyway希望用户提供的脚本是稳定的,以免造成额外的复杂性和混乱。
    Undo:

    manven命令 mvn flyway:undo
    

    20210706170104
    撤消最近应用的版本迁移。

    Baseline:

    manven命令 mvn flyway:baseline
    

    20210706170641
    对现有数据库进行基准测试,如果不存在flyway_schema_history文件,则会直接创建,并以当前状态为版本1
    Repair:

    manven命令 mvn flyway:repair
    

    20210706170938
    修复Flyway模式历史记录表。这将执行以下操作:

    在没有DDL事务的数据库上删除所有失败的迁移(留下的用户对象仍必须手动清理)
    将可用迁移的校验和,描述和类型与可用迁移重新对齐

    结合spring使用

    pom.xml引入

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

    参数配置

    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.
    

    plugins配置

                <plugin>
                    <groupId>org.flywaydb</groupId>
                    <artifactId>flyway-maven-plugin</artifactId>
                    <configuration>
                        <url>url</url>
                        <user>账号</user>
                        <password>密码</password>
                        <driver>com.mysql.cj.jdbc.Driver</driver>
                        <locations>
                            <location>地址</location>
                        </locations>
                    </configuration>
                </plugin>
    

    idea
    20210706174048

    参考文章:
    https://flywaydb.org/documentation/

    福禄·研发中心 福小雄
  • 相关阅读:
    策略模式 Web.Net版 [原理+代码] 鸭子呱呱叫
    关于onMouseOut违背逻辑关系的解决办法!
    js漂浮组件发布 ppFloat.js.1.0
    (转)跟我一起制作数据采集获取淘宝网店宝贝数据信息(二)
    (转)WCF学习笔记(一)——WCF基础
    (转)IIS负载均衡Application Request Route详解第一篇: ARR介绍
    (转)【原创】说说JSON和JSONP,也许你会豁然开朗,含jQuery用例
    (转)HTTP与Tcp协议下双工通信的差异
    (转)一个仿新浪微博的网站 mvc ado
    (转)微软开源的项目和架构学习
  • 原文地址:https://www.cnblogs.com/fulu/p/15000653.html
Copyright © 2011-2022 走看看