没有DBA的敏捷开发管理

发布于:2025-07-10 ⋅ 阅读:(21) ⋅ 点赞:(0)

前言

      一家人除了我都去旅游了,我这项请假,请不动啊。既然在家了,闲着也是闲着,就复盘下最近的工作,今天就复盘表结构管理吧,随系统启动的,不是flyway,而是另一个liquibase,个人觉得它比fly更优秀。
      现在当家了,才知道当小弟的快乐,现在比当核心的时候更累了,不过这也正常。但是实际上米并没有拿多,这该死的年龄,怀恋啊我们的青春啊。回想这一路走来,因为性格问题,被压制太久了,其实有些时候并不是你能力不够,而是上面不愿意让你发展…


一、Liquibase?

1.Liquibase是什么

  • Liquibase 是一个开源的数据库版本控制工具,主要用于自动管理数据库结构(Schema)变更,确保数据库在不同环境(开发、测试、生产)中的结构一致性。
  • Liquibase 是数据库的 Git。就像你用 Git 来管理代码版本一样,Liquibase 用来管理数据库结构的变更记录。

2.它能做什么

  • 自动执行数据库迁移脚本(建表、加字段、加索引等)

  • 将变更记录存入数据库,确保不重复执行

  • 支持回滚数据库操作

  • 适用于 CI/CD 自动部署流程

  • 多种格式支持:XML、YAML、JSON、SQL

3.基本原理

  • 每次你要对数据库做结构修改,就写一个“changelog”文件(变更日志)。

  • Liquibase 执行后会在数据库中建一个表叫 DATABASECHANGELOG,记录每次执行过的变更。

  • 之后每次运行时,Liquibase 会比对哪些变更没有执行过,只执行新的部分。

4.它适合什么场景

  • 使用微服务、多个环境(本地、测试、线上)的团队

  • 不希望 DBA 手工发 SQL 的项目

  • 想把数据库脚本版本控制起来的工程化团队

5.它与 Flyway 有什么区别?

      Liquibase 和 Flyway 是两大主流的 数据库迁移工具,它们都能自动执行数据库变更,但各有特点。下面是它们之间的核心区别对比:

功能 Liquibase Flyway
支持多种格式 YAML / XML / JSON / SQL 仅支持 SQL 和 Java
可声明式(非纯 SQL) 否(主要是 SQL)
脚本命名规则灵活 changelog-xxx.yaml 必须 V1__init.sql
顺序控制方式 id 字段控制顺序 文件名控制顺序
支持数据库种类 更广泛(几十种) 主流数据库为主
数据库记录执行历史|DATABASECHANGELOG 表|flyway_schema_history 表|
支持回滚 原生支持 手动写 rollback 脚本
自动执行迁移
Spring Boot 默认集成工具 非默认 默认集成

结论汇总:

  • Liquibase 更灵活,支持声明式写法,不用写原生 SQL。Flyway 更适合 DBA 写 SQL。
  • Flyway 严格依赖文件名排序执行脚本,而 Liquibase 通过 id + author 明确指定每条变更。
  • 两者都支持 MySQL、PostgreSQL、Oracle、SQL Server 等主流数据库。
  • Liquibase 原生支持 rollback,而 Flyway 不支持自动回滚,需人工写反向脚本。
  • Spring Boot 默认集成 Flyway(spring-boot-starter-data-jpa 会自动检测 Flyway 脚本),Liquibase 需要显式加依赖。

二、使用步骤

1.引入库

<dependency>
    <groupId>org.liquibase</groupId>
    <artifactId>liquibase-core</artifactId>
</dependency>

2.建目录

      一般是在resources下建db目录,下面方master.xml,建mysql目录。当然也可以在resources下建其他名称的目录,在xml文件里指定的目录对得上就行。
master.xml

<databaseChangeLog
        xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog
         http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.1.xsd">

    <!-- <include file="db/mysql/changelog.sql" relativeToChangelogFile="false"/>-->
    <includeAll path="db/mysql"/>

</databaseChangeLog>

mysql是用来存sql的
      这里在mysql目录下就建一个文件changelog.sql,我是不太愿意一个人建一个文件的,都在一个文件里写好提交的id注释就行了。

--liquibase formatted sql

-- changeset zw:202506291113
ALTER TABLE enterprise_matters CHANGE is_topic is_topic int(11) NULL COMMENT '是否主题,0否,1是' AFTER applicable_region;
-- comment:修改字段排序

      一直在这个文件下以-- changeset zw:提交id,-- comment:注释 结尾就行。
      注意,若果是在原始语句上修改,注意提交的id要往后变,当然一般情况是不支持这样搞的,还是建议再次写一个语句


总结

  • 就是这么简单,sql就管理起来了,个人觉得特别适合敏捷开发
  • 领头、领衔确实难点,需要考虑的事情多,最最重要的的是还要技术支撑,不然顶不住啊
          就写到这里,加油,uping!

网站公告

今日签到

点亮在社区的每一天
去签到