type
status
date
slug
summary
tags
category
icon
password
首次接触到利用Liquibase来管理数据库
先要明白Liquibase是什么:
Liquibase 是一个开源的数据库迁移工具,用于管理数据库的变更。它的主要用途是确保数据库的版本控制和变更管理,使得数据库的变更可以被跟踪、回滚和自动化执行。
为什么要这个东西:
上线的应用版本会迭代/更新 自然数据库的字段或者表就会表。
工作流程:把SQL变更记录到changeset,多个changeset组成日志文件,liquibase把这个更新日志文件同步到指定的RDBMS里面。
具体用法:
先配置数据库和liquibase
在
src/main/resources/db/changelog/
目录下创建 db.changelog-master.xml
文件。创建第一个变更日志文件
db.changelog-1.0.xml
一些概念需要弄清楚:
1.
- 变更日志(ChangeLog):是 Liquibase 的核心文件,用于定义数据库的变更集。变更日志可以是 XML、YAML、JSON 或 SQL 文件。
- 变更集(ChangeSet):是数据库变更的最小单位,包含一个或多个数据库变更操作。每个变更集由
id
和author
共同标识。
2.
- 什么是前置条件?在 Liquibase 中如何使用前置条件?
前置条件用于在执行变更集之前检查某些条件是否满足。如果条件不满足,Liquibase 可以根据配置采取不同的操作,如停止执行、标记变更集为已执行或发出警告。前置条件可以用于检查表、列、索引等是否存在。
3.
- Liquibase 的执行流程是怎样的?
- 初始化:Liquibase 初始化数据库,创建
DATABASECHANGELOG
和DATABASECHANGELOGLOCK
表。
- 加载变更日志:Liquibase 加载变更日志文件,解析其中的变更集。
- 检查前置条件:对于每个变更集,检查前置条件是否满足。
- 执行变更集:如果前置条件满足,执行变更集中的操作。
- 记录变更:将已执行的变更集记录到
DATABASECHANGELOG
表中。
4.
- 如何处理数据库迁移中的冲突?
- 如何回滚变更集?
- 如何处理不同环境(开发、测试、生产)的数据库变更?
可以这么说:
- 处理冲突:使用前置条件(Preconditions)来检查是否存在冲突,并根据需要采取不同的操作。
- 回滚变更集:在变更集中定义
<rollback>
标签,指定回滚操作。
- 处理不同环境:可以使用不同的变更日志文件或通过环境变量来区分不同环境的配置。