Flyway

文章讲述了开源数据库迁移框架Flyway如何在敏捷开发中发挥作用,通过版本控制实现自动化迁移,提升开发效率和数据库管理的可靠性,特别是在浪潮海岳物联网平台inIoT中的应用实例。
摘要由CSDN通过智能技术生成

Flyway是一个开源的数据库迁移框架,可以帮助开发人员自动化管理数据库结构和预置数据的变更,减少手动数据迁移,从而提高开发效率和数据库管理的可靠性。

敏捷开发是一种快速迭代的软件开发方法,需要快速地验证和测试新功能并快速部署。在这种情况下,数据库迁移工具是必不可少的。Flyway作为一种开源的数据库迁移工具,它可以轻松地管理数据库迁移,让开发人员专注于新功能的开发和部署。浪潮海岳物联网平台inIoT产品使用flyway工具,在产品开发和项目部署过程中进行了数据库迁移管理,提高了开发效率,减少了实施人员在更新迭代产品过程中的工作量,并且保障了数据库迁移的准确性和安全性。下面将从flyway原理、特点介绍flyway为何能适应敏捷开发模式,并简要介绍flyway的用法。

Flyway原理

Flyway的核心原理是基于数据库版本控制,将数据库的变更分为多个版本,每个版本都对应着一组DDL和DML语句,通过版本控制工具来管理这些语句的执行。这也契合了敏捷开发迭代的理念。

Flyway特点

1. 简单易用:flyway 是一个轻量级的数据库迁移工具,易于安装和使用。它提供了简单的命令行界面和 API,使得开发人员可以轻松地集成到他们的项目中。例如springboot中,只需要引入flyway,然后在配置文件对一些配置项进行修改就可以进行数据迁移了。

2. 易于跟踪: flyway 提供了版本控制,使得开发人员可以轻松地跟踪数据库的变化。这使得团队可以更加协作,同时也可以更好地理解和管理数据库的变化。

3. 自动化: flyway 可以自动化执行数据库迁移,这使得敏捷开发团队可以更快地开发新功能,同时也可以更容易地进行测试和部署。在敏捷开发中不频繁使用手动数据迁移,也提高了数据库管理的可靠性。

4. 可重复性: flyway 可以确保数据库迁移是可重复的,这意味着在不同的环境中使用相同的迁移脚本会产生相同的结果。这消除了很多与数据库变化相关的问题,从而提高了敏捷开发的效率和可靠性。

Flyway的用法

使用Flyway进行数据库迁移只需要以下几个步骤:

1. 引入Flyway依赖:首先需要在项目中引入Flyway的依赖,可以通过Maven或Gradle来管理依赖。

2. 配置数据源:Flyway需要通过数据源来连接数据库,因此需要在配置文件中配置数据源相关信息,如数据库URL、用户名和密码等。

3. 创建迁移脚本:根据数据库变更的需要,创建相应的迁移脚本。迁移脚本必须按照严格的命名规则来命名,以便Flyway能够自动识别和执行。命名规则是“V{版本号}__{描述}.sql”,其中版本号是一个整数,描述是一个简短的描述,用于描述这个迁移脚本所做的变更。

4. 执行迁移脚本:在应用启动时,Flyway会自动检测数据库中已经执行的版本,然后按照版本号的顺序执行尚未执行的版本,并在数据库中记录本次执行的版本号及结果,最终将数据库结构更新到最新版本。

5. 在具体实践过程:配合springboot和maven,首先我们在pom中引用flyway:

然后在application.yml中对flyway进行配置,配置项路径spring-flyway:

主要就是脚本文件位置(locations),数据库中的表名(table)等,数据库的相关配置如果不配置会自动引用配置文件中的datasource配置,其他具体配置项释义可参见本文后续。配置文件配置好后,启用项目flyway会自动创建记录执行情况的数据表:

在使用时,开发人员可以在配置的脚本文件路径下创建sql脚本文件,文件命名格式

采用默认格式“V{版本号}__{描述}.sql”:

这样启用程序时,flyway会根据记录表中记录的版本号和执行情况选择要执行的sql脚本文件并在记录表中添加执行记录,完成数据迁移:

6. Flyway配置项释义

flyway.url指定要连接的JDBC URL,必需项。
flyway.user指定连接数据库的用户名,必需项。
flyway.password指定连接数据库的密码,必需项。
flyway.driver指定JDBC驱动类名,如果不指定则会自动检测。
flyway.locations指定SQL脚本的位置,可以是classpath、文件系统路径或URL。
flyway.schemas指定要操作的数据库schema,可以是单个schema或多个schema,多个schema之间使用逗号分隔。
flyway.table指定flyway管理数据的表名,默认为schema_version。
flyway.outOfOrder指定是否允许执行不按顺序的migration,默认为false。
flyway.baselineOnMigrate指定是否在第一次执行migration时,执行baseline操作。
flyway.baselineVersion指定baseline的版本号,默认为1。
flyway.baselineDescription指定baseline的描述信息。
flyway.placeholderPrefix指定占位符的前缀,默认为${。
flyway.placeholderSuffix指定占位符的后缀,默认为}。
flyway.placeholders指定占位符的值,多个占位符之间使用逗号分隔。
flyway.sqlMigrationPrefix指定SQL脚本migration的前缀,默认为V。
flyway.sqlMigrationSuffix指定SQL脚本migration的后缀,默认为.sql。
flyway.repeatableSqlMigrationPrefix指定可重复的SQL脚本migration的前缀,默认为R。
flyway.target指定要升级到的目标版本号,默认为最新版本。
flyway.cleanOnValidationError指定在校验migration时出现错误时是否清空数据库,默认为false。
flyway.cleanDisabled指定是否禁用clean操作,默认为false。
flyway.encoding指定SQL脚本的编码,默认为UTF-8。
flyway.validateOnMigrate指定是否在执行migration时校验SQL脚本的正确性,默认为true。
flyway.ignoreMissingMigrations指定是否忽略缺失的migration,默认为false。
flyway.ignoreIgnoredMigrations指定是否忽略被忽略的migration,默认为false。
flyway.ignorePendingMigrations指定是否忽略未执行的migration,默认为false。
flyway.ignoreFutureMigrations指定是否忽略未来的migration,默认为false。
flyway.errorOverrides指定错误覆盖的规则,可以是warn、ignore、abort。
flyway.skipDefaultCallbacks指定是否跳过默认的callback,默认为false。
flyway.callbacks指定自定义的callback,多个callback之间使用逗号分隔。
flyway.skipDefaultResolvers指定是否跳过默认的resolver,默认为false。
flyway.resolvers指定自定义的resolver,多个resolver之间使用逗号分隔。
flyway.skipDefaultMigrations指定是否跳过默认的migration,默认为false。
flyway.mixed指定是否允许使用Java和SQL混合的migration,默认为false。
flyway.batch指定是否启用批处理操作,默认为false。
flyway.outputQueryResults指定是否输出查询结果,默认为false。
flyway.makeSchemas指定是否创建指定的schema,默认为true。
flyway.initSql指定初始化数据库时执行的SQL语句。
flyway.errorOnMissingBaseline指定是否在找不到baseline时报错,默认为false。
flyway.errorOnOutOfOrder指定是否在发现migration不按顺序时报错,默认为false。
flyway.errorOnValidate指定是否在校验migration时发现错误时报错,默认为false。

最后插个安利:inBuilder 低代码平台开源社区版,免费下载,免费使用,欢迎体验:

Flyway首页、文档和下载 - Java 数据库移植框架 - OSCHINA - 中文开源技术交流社区

SQLAdviser

软件简介

SQLAdvisor 是由美团点评公司北京 DBA 团队开发维护的 SQL 优化工具:输入 SQL,输出索引优化建议。 它基于 MySQL 原生词法解析,再结合 SQL 中的 where 条件以及字段选择度、聚合条件、多表 Join 关系等最终输出最优的索引优化建议。

SQLAdvisor 架构流程图:

SQLAdvisor 使用举例

sql: SELECT id FROM crm_loan WHERE id_card = '1234567'
cmd: ./sqladvisor -h xx -P xx -u xx -pxx -d xx -q "SELECT id FROM crm_loan WHERE id_card = '1234567'"
SQLAdvisor输出: alter table crm_loan add index idx_id_card(id_card)

特性:

  • 基于 MySQL 原生词法解析,充分保证词法解析的性能、准确定以及稳定性;

  • 支持常见的 SQL (Insert/Delete/Update/Select);

  • 支持多表 Join 并自动逻辑选定驱动表;

  • 支持聚合条件 Order by 和 Group by;

  • 过滤表中已存在的索引。

Homepage - Flyway

https://github.com/bytebase/bytebase

flyway:数据库进行版本控制

bytebase:用于数据库 DevOps 的 GitLab/GitHub。面向开发人员、DBA 和平台工程团队的世界上最先进的数据库 DevOps 和 CI/CD

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值