真香!flyway数据库版本控制

简介: 真香!flyway数据库版本控制

一、背景



  1. 不知道你是否有过被数据库虐过,初始化时报错某个表的表字段不存在,某个表不存在,然后我们拿着不完整的文档,捣鼓来捣鼓去,好的,大半天时间搞定;文档写的差的,搞得心态爆炸,然后还要到处问有没有最新文档啥的。
  2. 同事对数据库做了改动并且代码合并到线上(我并不参与review),之后我拉取线上代码,连接本地数据库启动项目,报错,原因是本地没有新添加的数据表,而项目启动依赖于他。
  3. 完成一个需求之后,打算将代码上线,需要在代码合入之前手动去线上(去服务器上或者通过phpmyadmin等工具)执行sql创建数据表。


二、为啥要使用flyway?



  1. 在日常的开发中,我们使用git管理代码的迭代,那么数据库怎么进行版本迭代呢?当然时使用flyway。 个人认为,可以大概的将flyway理解为数据库的git,方便多人协作、记录和自动同步数据库的迭代。git让你和同事更加轻松的维护同一个项目,你可以很方便的获取到他最新提交的改动。flyway让你及时的知道同事对数据库的改动并且能够自动在你的本地执行这些改动,可以完美解决上述的三个常见问题。
  2. 和同事同时维护一个项目,同时对数据库做出了一些修改,我在使用git拉取了最新的代码之后,运行总是报错,需要自己去重新执行一遍该表的创建语句来在本地进行创建,使用flyway后,拉取最新代码的同时会拉取最新的sql文件,同时在服务启动时自动创建数据表,对一些和自己无关的数据表完全不用关心了。
  3. 新接手一个项目,在本地进行开发调试,本地新建数据库后,需要执行一遍建表语句,使用flyway可以自动的创建该项目的所有表格。
  4. 换电脑,我日常开发使用一台台式机及一台笔记本,紧急情况使用家中笔记本进行一些开发,在每次新换电脑时都需要重新创建一遍数据库的表,十分的麻烦。使用flyway的遍历同第二点(可以理解为换电脑等于在新电脑上运行新项目)。


三、怎么使用flyway?



  1. 添加依赖
<dependency>
    <groupId>org.flywaydb</groupId>
    <artifactId>flyway-core</artifactId>
</dependency>


  1. 在application.yml中添加配置
spring:
  flyway:
    url: jdbc:mysql://127.0.0.1:3306/db
    schemas: db
    user: root
    password: 123456


  1. 在resources目录下添加db.migration目录,下添加.sql文件,命名格式如下:

640.png


四、flyway执行机制



1. flyway是依靠什么判断版本呢?


使用过一次之后你就知道,是根据数据库中schemas_version表的记录。你每次执行过一次sql文件,在该表中就会添加一条类似于V13 success的数据。当项目启动时,flyway扫描sql文件,发现当前有V14开头的文件,同时数据库中没有V14执行的记录,那么就会执行该文件。


2. 怎么在已有的项目添加flyway依赖呢?


你可以将当前数据库的所有表格创建语句导出到sql文件,然后新建V1__init_database.sql文件,将所有创建语句copy到该文件中,然后创建新库,连接新库启动项目,之后copy新库中schemas_version数据表的结构及数据,添加到已有的数据库中,这样项目启动时便不会对已有的数据库产生影响。这波操作的本质是:模仿一条记录,让flyway认为当前的数据库是一个已经执行过的版本,不做任何的改动,后续的改动继续添加即可。有时会写入错误的sql语句,修改后再次执行便会报错显示数据库中已有该版本的记录,此时进入数据库删除schemas_version中对应记录重新执行即可。(反正在开发环境无所谓的,我们又不会去生产环境执行错误的sql)。


目录
相关文章
|
存储 关系型数据库 数据库连接
flyway适配高斯数据库
flyway适配高斯数据库
400 0
|
4月前
|
SQL Java 数据库
使用Spring Boot和Flyway进行数据库迁移
使用Spring Boot和Flyway进行数据库迁移
|
1月前
|
安全 数据库 数据安全/隐私保护
数据库 变更和版本控制管理工具 --Bytebase 安装部署
数据库 变更和版本控制管理工具 --Bytebase 安装部署
51 0
|
2月前
|
SQL Java 数据库连接
数据库迁移不再难:Flyway 与 Liquibase 大比拼,哪个才是你的真命天子?
【9月更文挑战第3天】数据库迁移在软件开发中至关重要,尤其在使用 ORM 框架如 Hibernate 时。为确保部署时能顺利应用最新的数据库变更,开发者常使用自动化工具。Flyway 和 Liquibase 是当前流行的两种选择,均能有效管理数据库版本控制。Flyway 采用 SQL 脚本表示变更,简单易用;Liquibase 支持多种脚本格式,功能更强大,适合复杂项目。本文将对比这两种工具的特点,并通过示例展示各自的优缺点,帮助开发者根据项目需求做出合适的选择。
560 1
|
6月前
|
关系型数据库 Go 数据库
【Go语言专栏】Go语言中的数据库迁移与版本控制
【4月更文挑战第30天】本文介绍了Go语言中的数据库迁移和版本控制。针对数据库迁移,文章提到了使用Flyway和Liquibase两个工具。通过示例展示了如何在Go中集成这两个工具进行数据库结构的修改,以适应业务变化。而对于版本控制,文章以Git为例,说明了如何利用Git进行源代码和配置文件的管理,确保代码一致性与可追溯性。
222 0
|
3月前
|
数据库 Java 数据库连接
玩转Play Framework的秘密武器:Ebean ORM带你解锁高效数据库操作新姿势,让你的代码从此飞起来!
【8月更文挑战第31天】Play Framework 以其简洁的 API 和高效开发体验著称,Ebean ORM 则是其推荐的对象关系映射(ORM)工具之一。Ebean 可将 Java 对象轻松映射到数据库表,简化数据库交互。本文将指导你在 Play Framework 中使用 Ebean ORM 进行数据库操作,涵盖项目创建、依赖引入、数据库配置、模型定义及 CRUD 操作,并通过示例代码展示实现过程。通过这些步骤,你将学会如何利用 Ebean 的丰富功能,如事务管理、查询构建等,提升 Web 应用的数据库交互能力。
64 0
|
3月前
|
存储 测试技术 数据库
Entity Framework Core Migrations 超厉害!轻松实现数据库版本控制,让你的开发更顺畅!
【8月更文挑战第31天】数据库的演变是软件开发中不可或缺的部分。随着应用发展,数据库需不断调整以适应新功能。Entity Framework Core Migrations 作为数据库的守护者,提供强大的版本控制手段,确保不同环境下的数据库一致性。通过创建和管理迁移脚本,开发者可以有序地管理数据库变更,避免混乱和数据丢失。安装并配置好 EF Core 后,可以通过命令行工具轻松创建、应用及回滚迁移,如 `dotnet ef migrations add InitialMigration` 和 `dotnet ef database update`。
40 0
|
6月前
|
容灾 Java 数据库
OceanBase数据库常见问题之spring boot应用增加了flyway的依赖但没执行如何解决
OceanBase 是一款由阿里巴巴集团研发的企业级分布式关系型数据库,它具有高可用、高性能、可水平扩展等特点。以下是OceanBase 数据库使用过程中可能遇到的一些常见问题及其解答的汇总,以帮助用户更好地理解和使用这款数据库产品。
|
14天前
|
SQL 关系型数据库 MySQL
12 PHP配置数据库MySQL
路老师分享了PHP操作MySQL数据库的方法,包括安装并连接MySQL服务器、选择数据库、执行SQL语句(如插入、更新、删除和查询),以及将结果集返回到数组。通过具体示例代码,详细介绍了每一步的操作流程,帮助读者快速入门PHP与MySQL的交互。
29 1
|
16天前
|
SQL 关系型数据库 MySQL
go语言数据库中mysql驱动安装
【11月更文挑战第2天】
30 4
下一篇
无影云桌面