使用liquibase迁移数据库

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/yjaspire/article/details/83539701

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(为当前数据库打上标签)

猜你喜欢

转载自blog.csdn.net/yjaspire/article/details/83539701