LiquiBase
是一个用于数据库重构和迁移的开源工具,通过日志文件的形式记录数据库的变更,然后执行日志文件中的修改,将数据库更新或回滚到一致的状态。它的目标是提供一种数据库类型无关的解决方案,通过执行schema类型的文件来达到迁移。其有点主要有以下:
- 支持几乎所有主流的数据库,如MySQL, PostgreSQL, Oracle, Sql Server, DB2等;
- 支持多开发者的协作维护;
- 日志文件支持多种格式,如XML, YAML, JSON, SQL等;
- 支持多种运行方式,如命令行、Spring集成、Maven插件、Gradle插件等。
更多详情介绍,可以浏览官网doc。
版本 liquibase-3.4.2
安装liquibase到本机
下载地址 下载地址
生成数据库表结构如下
liquibase --driver=com.mysql.jdbc.Driver --classpath=mysql-connector-java-5.1.46.jar --changeLogFile=./dbchangelog.xml --url="jdbc:mysql://localhost:3306/lcp_db" --username=portals --password=java generateChangeLog
生成数据库数据如下
liquibase --driver=com.mysql.jdbc.Driver --classpath=mysql-connector-java-5.1.46.jar --changeLogFile=./dbchangelogda.xml --url="jdbc:mysql://localhost:3306/lcp_db" --username=portals --password=java --diffTypes=data generateChangeLog
如截图中的xml
iquibase初始化数据库如下
导入数据库表
liquibase --driver=com.mysql.jdbc.Driver --classpath=mysql-connector-java-5.1.46.jar --url="jdbc:mysql://127.0.0.1:3306/lcp_db4" --changeLogFile=dbchangelog.xml --username=portals --password=java migrate
导入数据
liquibase --driver=com.mysql.jdbc.Driver --classpath=mysql-connector-java-5.1.46.jar --url="jdbc:mysql://127.0.0.1:3306/lcp_db4" --changeLogFile=dbchangelogda.xml --username=portals --password=java migrate
maven初始化数据库
项目结构如下
pom中插件如下配置
<plugins>
<plugin>
<groupId>org.liquibase</groupId>
<artifactId>liquibase-maven-plugin</artifactId>
<version>3.4.2</version>
<configuration>
<skip>${skipLiquibaseRun}</skip>
</configuration>
<executions>
<execution>
<id>update</id>
<phase>process-resources</phase>
<configuration>
<changeLogFile>src/main/resources/liquibase/master.xml</changeLogFile>
<driver>${db.driver}</driver>
<url>${db.url}</url>
<username>${db.user}</username>
<password>${db.password}</password>
<promptOnNonLocalDatabase>false</promptOnNonLocalDatabase>
</configuration>
<goals>
<goal>update</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
</plugins>
master.xml如下
<?xml version="1.0" encoding="utf-8"?>
<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.4.xsd">
<include file="src/main/resources/liquibase/change_log/dbchangelog.xml" relativeToChangelogFile="false"/>
<include file="src/main/resources/liquibase/change_log/dbchangelogda.xml" relativeToChangelogFile="false"/>
</databaseChangeLog>
maven执行命令如下
mvn process-resources -D skipLiquibaseRun=false -D db.driver=com.mysql.jdbc.Driver -D db.url=jdbc:mysql://127.0.0.1:3306/lcp_db6 -D db.user=root -D db.password=java
最常用的命令说明:
update(将xml的改变更新到数据库)
rollback(回滚到某一版本或者某一时刻,必须要带上rollbackTag参数)
dbDoc (生成数据库文档)
dropAll(慎用,清空当前数据库,包括liquibase的版本信息)
generateChangeLog(根据数据库反向生成changeLog文件)
tag(为当前数据库打上标签)