Idea Spring-boot maven下使用liquibase
官方文档
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的路径 然后可以在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
我们show一下table DatabaseChangeLog select一下,会发现这个表记录的是每次update的变更集以及用户和时间等相关信息,用来更新和回滚 再show一下table DatabaseChangeLogLock 看下官网 Liquibase使用DATABASECHANGELOGLOCK表来确保一次只运行一个Liquibase实例。因为Liquibase只是从DATABASECHANGELOG表中读取数据以确定需要运行哪些变更集
所以如果对同一个数据库同时执行多个Liquibase实例,则会发生冲突。
如果多个开发人员使用同一个数据库实例,或者集群中有多个服务器在启动时自动运行Liquibase,则可能发生这种情况。
所以这个表是用来锁数据库的,避免多个开发人员同一时刻操作数据库的时候造成冲突 下图是四个字段的用途 id和locked好理解,lockgranted指的是锁库日期,lockedby指的是被谁锁定回滚 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
论读书
睁开眼,书在面前 闭上眼,书在心里
睁开眼,书在面前 闭上眼,书在心里