【数据库学习】Flyway

1,功能

  1. 数据库版本管理;
    实现管理并跟踪数据库变更,支持数据库版本自动升级。

2,使用

1)java使用

添加依赖

<dependency>
	<groupId>org.flywaydbgroupId>
	<artifactId>flyway-coreartifactId>
	<version>6.5.7version>
dependency>

配置:

java
spring:
  flyway:
    #是否启用
    enabled: true
	# 可以支持多个location, 用','隔开
	locations: classpath:db/migration
	#是否创建元数据表
	validate-on-migrate: true
	# flyway 的 clean 命令会删除指定 schema 下的所有 table, 生产务必禁掉。这个默认值是
	false 理论上作为默认配置是不科学的。V9版本中默认值为true。
	clean-disabled: true
  # 说明
  baseline-description: baseline init
	# 如果数据库不是空表,需要设置成 true,否则启动报错
	# 设置为true后flyway将在需要baseline的时候,自动执行一次baseline。
	baseline-on-migrate: true
	# 版本控制日志表,默认flyway_schema_history,不同系统建议修改数据
  table: flyway_history_table_${spring.application.name}

2)sql脚本命名规范

前缀+版本号(以.或者_分隔)+分隔符(双下划线__)+脚本名.sql
举例:V1.6.0__ADD_xxx.sql    R__clean.sql(无版本号)
  1. 版本号递增;
  2. checkSum一致;
    相同版本号对应的脚本,checkSum不同会抛出异常。
    checkSum算法:CRC32 (循环冗余校验码)算法。
  3. 前缀:
    V开头表示仅执行一次;优先级高于R执行;文件不可被删除、修改。
    R开头表示重复执行;多个R执行顺序按命名顺序来。

3)shell使用

命令格式:

flyway-6.0.3/flyway migrate -url=jdbc:postgresql://postgresql.host:5432/ngsoc -user=postgres -password=${DB_PASS} -schemas=public -table=flyway_history_table_${SERVER} -locations=filesystem:${BASE_DIR}/db -baselineVersion=0 -baselineOnMigrate=true
命令 说明
Migrate 把数据库默认数据库迁移到最新版本
Clean 清除指定库下所有的对象,包括table、view、triggers…,让数据库变成空的状态。
Info 打印所有Migrations的详细和状态信息
Validate 验证已经应用的Migrations是否有变更,Flyway是默认是开启验证的。
Baseline 针对已经存在表结构的数据库的一种解决方案,即实现在非空数据库中新建Metadata表,并把Migrations应用到该数据库。
Repair 修复Metadata表,该操作在Metadata表出现错误时是非常有用的。

4)版本回退、任务队列、异步任务

商业版才有。

3, 原理

  1. 首次执行时创建flyway_schema_history的历史记录表
    这张表用来跟踪或记录数据库的状态,然后每次项目启动时都会自动扫描在resources/db/migration下的文件的版本号并且通过查询flyway_schema_history来判断是否有新增文件,从而判断是否进行迁移。
  2. 数据库锁机制:数据库排他锁
    用于控制分布式节点多节点执行sql脚本时可控。

4,对比

维度 Flyway Liquibase
可观测性 通过数据库schema历史表查看变更记录。 可以通过页面查看所有变更记录
跨平台 不支持跨平台 支持跨平台。

你可能感兴趣的:(数据库学习,数据库学习之postgres,数据库)