Liquibase使用(转发)

本文链接:https://blog.csdn.net/zhao0416/article/details/94733610

 

文章目录
介绍
快速使用
Springboot中
引入依赖
配置日志文件ChangeLog
编写变更记录ChangeSet
Maven中
引入依赖
配置liquibase.properties
编写变更记录ChangeSet
版本回滚
回滚指定次数
回滚到指定tag
输出回滚语句
输出变更记录
一些规范
参考资料
介绍
Liquibase是一个用于数据库重构和迁移的开源工具,通过日志文件的形式记录数据库的变更,然后执行日志文件中的修改,将数据库更新或回滚到一致的状态。它的目标是提供一种数据库类型无关的解决方案,通过执行schema类型的文件来达到迁移。其有点主要有以下:

支持几乎所有主流的数据库,如MySQL, PostgreSQL, Oracle, Sql Server, DB2等;
支持多开发者的协作维护;
日志文件支持多种格式,如XML, YAML, JSON, SQL等;
支持多种运行方式,如命令行、Spring集成、Maven插件、Gradle插件等。
快速使用
Springboot中
引入依赖
<dependencies>
    <dependency>
        <groupId>org.liquibase</groupId>
        <artifactId>liquibase-core</artifactId>
    </dependency>
    <dependency>
</dependencies>
1
2
3
4
5
6
7
配置日志文件ChangeLog
在resources目录中创建/db/changelog目录作为日志文件存放目录
在目录中创建日志文件db.changelog-master.yml
在application.yml中配置changelog路径
spring:
  liquibase: 
    # 不配置默认会查找'classpath:/db/changelog/db.changelog-master.yaml'文件
    change-log: 'classpath:/db/changelog/db.changelog-master.yml'
1
2
3
4
编写变更记录ChangeSet
编写初始数据库脚本
databaseChangeLog:
  - changeSet:
      # 唯一id,建议使用Flayway的命名格式'V<version>[_<SEQ>][__description]'
      id: V1.0_0__init
      # 作者
      author: Cheivin
      # 描述
      comment: "初始化脚本内容,加载初始数据"
      # 启用事物
      runInTransaction: true
      # 变更脚本
      changes:
        # 创建表格
        - createTable:
            tableName: user
            columns:
              - column:
                  name: id
                  type: int
                  autoIncrement: true
                  constraints:
                    primaryKey: true
                    nullable: false
                  remarks:
              - column:
                  name: username
                  type: VARCHAR(50)
                  constraints:
                    nullable: false
              - column:
                  name: password
                  type: VARCHAR(50)
                  constraints:
                    nullable: false
        # 加载数据
        - loadData:
            tableName: user
            columns:
              - column:
                  header: username
                  name: username
              - column:
                  header: password
                  name: password
            encoding: UTF-8
            file: db/data/init-data.csv
        # 标记,用于回滚时指定版本
        - tagDatabase:
            tag: V1.0_0__init
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
运行项目后,查看数据库
修改changelog,增加变更数据库脚本
# 在databaseChangeLog后追加
  - changeSet:
      id: V1.0_1__mod
      author: Cheivin
      comment: "修改用户表,增加账单表"
      runInTransaction: true
      changes:
        # 通过标准格式添加字段
        - addColumn:
            # 目标表
            tableName: user
            columns:
              - column:
                  name: state
                  type: tinyint
                  # 默认值
                  defaultValueNumeric: 0
                  remarks: '用户状态,0:未激活,1:激活,-1:禁用'
              - column:
                  name: identity
                  type: int
                  # 默认值
                  defaultValueNumeric: 999
                  remarks: '用户身份,999:管理员'
        # 通过sql语句操作数据库
        - sql:
            sql: insert into user (username,password,state,identity) values ('admin','admin',1,999)
        # 通过sql文件操作数据库
        - sqlFile:
            encoding: utf8
            path: db/changelog/V1.0_1__mod_bill.sql
        - tagDatabase:
            tag: V1.0_1__mod
        # 回滚语句
        - rollback:
            - delete:
                tableName: user
                where: username='admin'
            - dropTable:
                tableName: user_bill
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
Maven中
引入依赖
<build>
    <plugins>
        <plugin>
            <groupId>org.liquibase</groupId>
            <artifactId>liquibase-maven-plugin</artifactId>
            <version>3.6.3</version>
            <configuration>
              <!-- 配置文件,必须放在resource目录下 -->
              <propertyFile>src/main/resources/liquibase/liquibase.properties</propertyFile>
            </configuration>
            <executions>
                <!-- 默认mvn启动时执行更新操作 -->
                <execution>
                    <phase>process-resources</phase>
                    <goals>
                        <goal>update</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
配置liquibase.properties
# 日志文件路径,必须放在resource目录下
changeLogFile=src/main/resources/liquibase/db.changelog-master.yml
# 数据库地址
url=jdbc:mysql://localhost:3306/liquibase_mvn?useSSL=false&useUnicode=true&characterEncoding=UTF-8
# 账号
username=root
# 密码
password=root
1
2
3
4
5
6
7
8
编写变更记录ChangeSet
编写初始数据库脚本
databaseChangeLog:
  - changeSet:
      # 唯一id,建议使用Flayway的命名格式'V<version>[_<SEQ>][__description]'
      id: V1.0_0__init
      # 作者
      author: Cheivin
      # 描述
      comment: "初始化脚本内容,加载初始数据"
      # 启用事物
      runInTransaction: true
      # 变更脚本
      changes:
        # 创建表格
        - createTable:
            tableName: user
            remarks: '用户表'
            columns:
              - column:
                  name: id
                  type: int
                  autoIncrement: true
                  constraints:
                    primaryKey: true
                    nullable: false
              - column:
                  name: username
                  type: VARCHAR(50)
                  constraints:
                    nullable: false
                  remarks: '用户名'
              - column:
                  name: password
                  type: VARCHAR(50)
                  constraints:
                    nullable: false
                  remarks: '密码'
        # 加载数据
        - loadData:
            tableName: user
            columns:
              - column:
                  header: username
                  name: username
              - column:
                  header: password
                  name: password
            encoding: UTF-8
            file: src/main/resources/liquibase/data/init-data.csv
        # 标记,用于回滚时指定版本
        - tagDatabase:
            tag: V1.0_0__init
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
运行项目后,查看数据库
修改changelog,增加变更数据库脚本
# 在databaseChangeLog后追加
  - changeSet:
      id: V1.0_1__mod
      author: Cheivin
      comment: "修改用户表,增加账单表"
      runInTransaction: true
      changes:
        # 通过标准格式添加字段
        - addColumn:
            # 目标表
            tableName: user
            columns:
              - column:
                  name: state
                  type: tinyint
                  # 默认值
                  defaultValueNumeric: 0
                  remarks: '用户状态,0:未激活,1:激活,-1:禁用'
              - column:
                  name: identity
                  type: int
                  # 默认值
                  defaultValueNumeric: 999
                  remarks: '用户身份,999:管理员'
        # 通过sql语句操作数据库
        - sql:
            sql: insert into user (username,password,state,identity) values ('admin','admin',1,999)
        # 通过sql文件操作数据库
        - sqlFile:
            encoding: utf8
            path: src/main/resources/liquibase/V1.0_1__mod_bill.sql
        - tagDatabase:
            tag: V1.0_1__mod
        # 回滚语句
        - rollback:
            - delete:
                tableName: user
                where: username='admin'
            - dropTable:
                tableName: user_bill
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
版本回滚
回滚指定次数
命令格式

mvn liquibase:rollback -Dliquibase.rollbackCount=次数
1
eg:

mvn liquibase:rollback -Dliquibase.rollbackCount=1
1
回滚到指定tag
命令格式

mvn liquibase:rollback -Dliquibase.rollbackTag=tag名称
1
eg:

mvn liquibase:rollback -Dliquibase.rollbackTag=V1.0_0__init
1
输出回滚语句
命令格式

mvn liquibase:rollbackSQL -Dliquibase.rollbackCount=次数

mvn liquibase:rollbackSQL -Dliquibase.rollbackTag=tag名称
1
2
3
将会在target/liquibase目录中生成migrate.sql文件

输出变更记录
命令格式

mvn liquibase:dbDoc
1
将会在target/liquibase目录中生成dbDoc目录,打开index.html可查看

一些规范
ChangeSet id建议使用Flayway的命名格式V<version>[_<SEQ>][__description],如V1.0_0__init。或使用[任务ID]-[日期]-[序号],如T100-20190705-001
ChangeSet必须填写author
Liquibase禁止对业务数据进行sql操作
所有表,列要加remarks进行注释
已经执行过的ChangeSet严禁修改。
不要随便升级项目liquibase版本,特别是大版本升级。不同版本ChangeSet MD5SUM的算法不一样。
————————————————
版权声明:本文为CSDN博主「Cheivin」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/zhao0416/article/details/94733610

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Liquibase是一个数据库版本控制工具,可以用来管理数据库变更。下面是Liquibase的简单使用步骤: 1. 创建一个Liquibase项目,可以使用Maven或Gradle等构建工具来创建。 2. 配置Liquibase,包括数据库连接信息、变更日志文件路径等。 3. 创建变更集,可以使用XML、YAML或JSON等格式来定义。 4. 运行Liquibase命令来执行变更集,例如执行更新命令: ``` liquibase update ``` 5. 查看数据库变更记录,可以使用命令: ``` liquibase history ``` 6. 回滚数据库变更,可以使用命令: ``` liquibase rollback <tag> ``` 其中,<tag>是变更集的标签,用于指定回滚到哪个点。 以上是Liquibase的简单使用步骤,更多详细信息请参考官方文档。 ### 回答2: Liquibase是一个开源的数据库版本控制工具,可以帮助开发人员管理数据库的演变过程。它使用XML、YAML或JSON格式的脚本文件来定义数据库结构和数据的变更,从而使数据库的追踪和同步变得更加容易。 Liquibase的简单使用可以分为以下几个步骤: 1. 引入Liquibase依赖:在项目的构建配置文件中添加Liquibase的依赖项,例如在Maven项目中,在pom.xml文件中添加Liquibase相关的依赖。 2. 创建Liquibase配置文件:在项目的根目录下创建一个名为liquibase.properties的文件,并配置数据库连接信息,如数据库驱动、URL、用户名和密码等。 3. 编写变更脚本:创建一个名为changelog.xml的文件,用于定义数据库的结构和数据的变更。可以使用Liquibase提供的各种标签和属性来描述添加表、字段、索引、约束、存储过程等操作。 4. 执行变更脚本:使用Liquibase命令行工具或API来执行变更脚本。命令行方式可以通过运行liquibase update命令来应用所有未应用的变更,API方式可以在应用程序启动时通过编程方式来初始化和执行变更脚本。 5. 查看数据库状态:可以使用Liquibase的status命令来查看数据库中已应用和未应用的变更,以及当前数据库的状态信息。 通过上述步骤,我们可以很容易地使用Liquibase来管理数据库的变更。它不仅可以帮助我们追踪数据库结构和数据的变化历史,还能够自动处理数据库的升级和回滚,大大简化了数据库的管理工作,提高了开发人员的工作效率。 ### 回答3: Liquibase是一个流行的开源数据库重构工具,可以帮助开发人员对数据库进行版本控制和管理。 使用Liquibase进行数据库重构的步骤如下: 1. 首先,需要在项目中引入Liquibase的库文件。可以通过将Liquibase的依赖添加到项目的构建文件(如pom.xml)中,或者手动下载并添加到项目中。 2. 然后,在项目的资源文件夹中创建一个Liquibase配置文件(如liquibase.properties、liquibase.yml或liquibase.xml)。配置文件中包含了数据库连接信息、变更集文件路径等配置项。 3. 创建一个变更集文件(如changelog.xml),用于存储数据库的变更历史。可以通过添加与数据库相关的标签(如创建表、修改表结构、插入数据等)来定义具体的变更操作。 4. 运行Liquibase命令行工具或使用代码方式启动Liquibase,执行变更集文件中的变更操作。Liquibase会根据变更集文件中定义的变更操作,自动检测数据库的当前状态,并将其与变更集文件中的期望状态进行比对,然后执行必要的变更操作以使数据库达到期望状态。 5. 可以使用Liquibase提供的其他功能,如回滚变更、生成数据库文档等。 总结来说,Liquibase简单使用的步骤包括引入Liquibase库文件、创建配置文件、定义变更集文件,然后通过运行Liquibase命令行工具或使用代码方式执行变更操作。Liquibase可以帮助开发人员在多人协作或持续集成环境中轻松管理和控制数据库的变更。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值