官方文档
https://docs.liquibase.com/tools-integrations/maven/home.html通过liquibase使用mysql
https://docs.liquibase.com/workflows/database-setup-tutorials/mysql.html?Highlight=mysql 首先在pom.xml中引入liquibase的依赖<dependency> <groupId>org.liquibase</groupId> <artifactId>liquibase-core</artifactId> </dependency>
--driver=com.mysql.cj.jdbc.Driver --classpath=mysql-connector-java-8.0.22.jar --url="jdbc:mysql://bj-cdb-nivnaury.sql.tencentcdb.com:60991/lianmai?autoReconnect=true&useSSL=FALSE" --changeLogFile=db.changelog-1.0.xml --username=*****--password=*****


driver=com.mysql.cj.jdbc.Driver classpath=mysql-connector-java-8.0.22.jar url=jdbc:mysql://bj-cdb-nivnaury.sql.tencentcdb.com:*/lianmai?autoReconnect=true&useSSL=FALSE changeLogFile=src/main/resources/db/changelog/dbChangeLog.xml outputChangeLogFile=src/main/resources/db/changelog/outputChangeLog.xml username=* password=*
生成changelog命令
https://docs.liquibase.com/commands/community/generatechangelog.html?Highlight=generateChangeLog踩坑过程
首先要配置propertyFile属性,下面是我的目录结构以及propertyFile的属性配置
<plugin> <groupId>org.liquibase</groupId> <artifactId>liquibase-maven-plugin</artifactId> <configuration> <propertyFile>src/main/resources/liquibase.properties</propertyFile> </configuration> </plugin>






outputChangeLogFile=src/main/resources/db/changelog/outputChangeLog.xml




通过liquibase update命令使用changeLogFile文件更新数据库
修改changeLog的路径

- 将changeset添加到变更日志。
- changeset由author和id属性唯一标识。
- Liquibase尝试执行事务中在最后提交的每个changeset。
<changeSet id="1" author="bob"> <createTable tableName="department"> <column name="id" type="int"> <constraints primaryKey="true" nullable="false"/> </column> <column name="name" type="varchar(50)"> <constraints nullable="false"/> </column> <column name="active" type="boolean" defaultValueBoolean="true"/> </createTable> </changeSet>
CREATE TABLE "department" ("id" number (*,0), "name" VARCHAR2 (50 BYTE), "active" NUMBER (1, 0) DEFAULT 1 );


DatabaseChangeLog 和 DatabaseChangeLogLock




因为Liquibase只是从DATABASECHANGELOG表中读取数据以确定需要运行哪些变更集
所以如果对同一个数据库同时执行多个Liquibase实例,则会发生冲突。
如果多个开发人员使用同一个数据库实例,或者集群中有多个服务器在启动时自动运行Liquibase,则可能发生这种情况。
所以这个表是用来锁数据库的,避免多个开发人员同一时刻操作数据库的时候造成冲突 下图是四个字段的用途
回滚 maven Rollback
官方地址 https://docs.liquibase.com/tools-integrations/maven/commands/maven-rollback.html?Highlight=rollback 三种回滚模式liquibase.rollbackCount
- 按顺序还原指定数量的变更集,从最新的变更开始,向后操作,直到达到指定的值liquibase.rollbackTag
- 还原被标记的数据库所做的所有更改liquibase.rollbackDate
- 恢复数据库所做的所有更改到指定的日期和时间
mvn liquibase:rollback -Dliquibase.rollbackCount=3
mvn liquibase:rollback -Dliquibase.rollbackTag=version1
<liquibase.tag>v3.2.1</liquibase.tag>
<liquibase.rollbackTag>${liquibase.tag}</liquibase.rollbackTag>
mvn liquibase:rollback -Dliquibase.rollbackDate=2020-11-26