搭建网站有什么用成都网站建设软件
1. 为什么需要flyway?
代码可以使用git等工具来做版本控制。同样,数据库也需要一个类似等工具来做DB方面等版本控制。
2. flyway 如何工作?
flyway会先查找数据中的历史信息记录表schema history table.
2.1 数据库里面是空的
(1)由于数据库为空,因此Flyway找不到该表,于是创建它。于是数据库里面就会多一张默认名称为flyway_schema_history的空表。该表用于跟踪数据库的状态信息。
(2)Flyway立即开始从指定的路径下扫描应用程序中为migrations指定的文件:比如sql文件。
(3)将扫描到的migration文件按照版本号顺序存储在flyway_schema_history表中。每一个migration被执行一次,flyway_schema_history中的记录就会被更新一次。
其中:flyway_schema_history的表结构如下表所示:
2.2 数据库已经存在初始状态,如果需要版本升级时,就可以将当前的状态升级到新的版本状态。
(1)Flyway将再次扫描指定的路径下的migrations文件,然后根据flyway_schema_history表中的记录检查当前的migrations文件。 如果它们的版本号小于或等于当前的版本号,则将忽略它们。否则这些文件都是将要执行(待处理pending)的文件,但此时并未开始执行。注意:flyway会计算这些脚本的校验和,然后和数据库记录执行过的脚本比较,如果他们校验和不一致就会报错并停止项目执行
(2)按照版本号将扫描到的文件存到flyway_schema_history表中,并按顺序执行。
其中表会被更新:
3. fly的相关操作
3.1 Migrate
如果是新增的,之前如果不存在,则直接添加。
表现形式:而不管当前版本如何,执行版本更新操作都是幂等的。
例如:
(1)我们期望升级到版本9,且数据库处于版本5。那么Migrate将依次执行6、7、8和9到migrations。
(2)我们期望升级到版本9,且数据库的版本为9。那么Migrate不执行任何操作。
3.2 Clean
从配置到schemas中删除所有对象(tables, views, procedures, …)。
3.3 Validate
对已经运行过到migrations和当前有效的migrations进行校验
在执行migration时,The validate mechanism checks if the migration locally still has the same checksum as the migration already executed in the database.会通过校验和(CRC32 for SQL migrations)对数据库中的版本和当前需要升级的版本进行校验。验证机制会检查本地的migration的校验和与数据库中已执行的migration的校验和是否相同。
4. spring-boot中相关配置参数说明:
flyway.baseline-description 执行migration时基准版本的描述.
flyway.baseline-on-migrate 执行当migration时发现目标schema非空,而且带有没有元数据的表时,是否自动执行基准迁移,默认false.
flyway.baseline-version开始执行基准migration时对现有的schema的版本打标签,默认值为1.
flyway.check-location检查migration脚本的位置是否存在,默认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 Migration脚本的位置,默认db/migration.
flyway.out-of-order 是否允许无序的migration,默认false.
flyway.password 目标数据库的密码.
flyway.placeholder-prefix 设置每个placeholder的前缀,默认${.
flyway.placeholder-replacementplaceholders 是否要被替换,默认true.
flyway.placeholder-suffix 设置每个placeholder的后缀,默认}.
flyway.placeholders.[placeholder name] 设置placeholder的value
flyway.schemas 设定需要flywary migration的schema,大小写敏感,默认为连接默认的schema.
flyway.sql-migration-prefix migration 文件的前缀,默认为V.
flyway.sql-migration-separator migration 脚本的文件名分隔符,默认__
flyway.sql-migration-suffix migration脚本的后缀,默认为.sql
flyway.tableflyway使用的元数据表名,默认为schema_version
flyway.target 迁移时使用的目标版本,默认为latest version
flyway.url Migration 使用的JDBC URL,如果没有指定的话,将使用配置的主数据源
flyway.user Migration 数据库的用户名
flyway.validate-on-migrate 执行migration时是否校验,默认为true
参考链接:
1. https://flywaydb.org/documentation/command/baseline