目录
1.Flyway 报错:Detected applied migration not resolved locally:2
一.前言
在实际开发中使用到Flyway ,对于flyway我们做一下简单介绍
1.Flyway简介
Flyway 是一款开源的数据库版本管理工具。它可以很方便的在命令行中使用,或者在Java应用程序中引入,用于管理我们的数据库版本。
在项目或产品中,很难一开始就把业务理清楚,把数据库表设计好,因此数据表也会在迭代周期不断迭代。在Java应用程序中使用Flyway,能快速有效地用于迭代数据库表结构,并保证部署到测试环境或生产环境时,数据表都是保持一致的。
具体介绍请看Flyway官方文档
https://flywaydb.org/documentation/
2.flyway依赖包
<dependency>
<groupId>org.flywaydb</groupId>
<artifactId>flyway-core</artifactId>
<version>7.9.2</version>
</dependency>
3.使用flyway的好处
在多人开发的项目中,我们都习惯了使用SVN或者Git来对代码做版本控制,主要的目的就是为了解决多人开发代码冲突和版本回退的问题。
其实,数据库的变更也需要版本控制,在日常开发中,我们经常会遇到下面的问题:
自己写的SQL忘了在所有环境执行。
别人写的SQL我们不能确定是否都在所有环境执行过了。
有人修改了已经执行过的SQL,期望再次执行。
需要新增环境做数据迁移。
每次发版需要手动控制先发DB版本,再发布应用版本。
其它场景。
有了flyway,这些问题都能得到很好的解决。
二.问题分析
1.Flyway 报错:Detected applied migration not resolved locally:2
在使用Flyway作系统管理的时候我的程序报的此类错误
1.1问题分析:
报错内容:检测到应用迁移未在本地解决
在网上找了这个问题的原因是:
1.由于导入数据库包含flyway_schema_history表,所以本地运行时出现版本不一致报错,
2.迁移了一个版本为2的sql,然后我把它删了,它再第二次运行的时候,找不到我之前迁移过的V2__orange_cms这个文件。
1.2解决方法
特别注意:一定是在测试环境和本地环境
1.mvn flyway:clean,这一步会清空现有数据。
2.确保配置文件中,开启flyway。
3.启动项目,完成flyway_schema_history表初始化,启动完成后备份flyway_schema_history表
4.导入数据,此时flyway_schema_history表会被更新为导入数据的版本
5.导入成功后,删除flyway_schema_history表,将备份的flyway_schema_history表替换
6.再次启动应用,Success!
2.执行脚本错误
2.1问题分析
报错信息大致意思:在我项目配置文件开启Flyway时,会爆:执行sql异常,找不到"xxx"表.
这个可是困扰我很久的一个问题, 看我的程序和配置都没有错,就是不知道错在哪里.
错误原因:由于我们的flyway是基于数据库mysql5.7的版本但是我的本机数据库版本是mysql5.5的所以开启Flyway配置进行数据库初始化总是报错"找不到xxx表"
2.2问题解决
升级我们的数据库版本,大于等于我们的开发数据库版本,由于升级数据库的道路有点曲折建议大家借鉴:比较详细
https://blog.csdn.net/m0_49284219/article/details/121972531
数据库升级完成后开启我们的Flyway配置
启动程序来看看我们的项目来测试一下能否启动成功
三. 总结
1.强调:对于我们的Flyway要根据我们的实际情况进行我们的库表删除,不要忙目删除我们的flyway_schema_history表
2.flyway是对数据库版本管理比较优秀的一个工具,对数据库表的版本控制比较强.
3.对于上述有和我一样问题的同学希望能帮到大家,对于解决此类问题欢迎大家留言讨论,也希望大家对于Flyway其他问题也可以进行讨论