Linux部署liquibase的教学(CV工程师请进)

liquibase功能:

1.所有数据库脚本入库(代码仓库,如Github、Gitlab等) 管理

2方便地从零开始创建新的数据库实例

3随时清楚数据库当前所处的状态

4.确定性地从当前数据库版本迁移到新版本

5.无需手工执行数据库脚本变更操作

6方便地回退数据库变更

安装部署:

1.前提:mysql的数据库环境:

#安装mysql略!

#mysql -uroot -p***

>create database cien66;

>grant all on cien66.* to cien66@localhost identified by 'cien66';

2.配置java1.8得环境

  • 当前配置Java 1.8 运行环境,
  • liquibase 2.x 依赖java 1.5+,
  • liquibase 3.x 依赖 java1.6+

yum -y install wget

wget https://d6.injdk.cn/oraclejdk/8/jdk-8u341-linux-x64.rpm

yum localinstall jdk-8u341-linux-x64.rpm -y

java -version

3.安装liquibase-4.12.0

wget https://github.com/liquibase/liquibase/releases/download/v4.12.0/liquibase-4.12.0.tar.gz

mkdir -p /www/server/liquibase

tar -zxvf liquibase-4.12.0.tar.gz -C /www/server/liquibase

4.配置环境变量

vim /etc/profile.d/liquibase

export PATH=$PATH:/www/server/liquibase

# source /etc/profile.d/liquibase

liquibase --version

liquibase --help

5.下载数据库驱动包→ 放到lib目录

cd /www/server/liquibase/lib

wget https://downloads.mysql.com/archives/get/p/3/file/mysql-connector-j-8.0.33.tar.gz

tar xvf mysql-connector-j-8.0.33.tar.gz

mv /mysql-connector-j-8.0.33/mysql-connector-j-8.0.33.jar .

6.注意事项

如果您在文件中使用的是UTF8编码,那么请务必在liquibase.bat文件中添加一行:

IF NOT DEFINED JAVA_OPTS set JAVA_OPTS=-Dfile.encoding=UTF–8。

7.UAT环境使用

1.##创建changelog日志

mkdir changelog              

cd changelog

2.##编写sql脚本文件

vim master.yml                 

databaseChangeLog:
  - preConditions:
    - runningAs:
        username: cien66

  - changeSet:
      id: 1
      author: nvoxland
      changes:
        - createTable:
            tableName: person
            columns:
              - column:
                  name: id
                  type: int
                  autoIncrement: true
                  constraints:
                    primaryKey: true
                    nullable: false
              - column:
                  name: firstname
                  type: varchar(50)
              - column:
                  name: lastname
                  type: varchar(50)
                  constraints:
                    nullable: false
              - column:
                  name: state
                  type: char(2)

  - changeSet:
      id: 2
      author: nvoxland
      changes:
        - addColumn:
            tableName: person
            columns:
              - column:
                  name: username
                  type: varchar(8)

  - changeSet:
      id: 3
      author: nvoxland
      changes:
        - addLookupTable:
            existingTableName: person
            existingColumnName: state
            newTableName: state
            newColumnName: id
            newColumnDataType: char(2)

3.##初始化

liqubase init project           

4.##配置链接数据库的数据

vim liquibase.properties    

driver: com.mysql.cj.jdbc.Driver
classpath: ../lib/mysql-connector-j-8.0.33.jar
url: jdbc:mysql://localhost:3306/cien66?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8
referenceDriver: com.mysql.cj.jdbc.Driver
referenceUrl: jdbc:mysql://localhost:3306/cien66?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8
username: cien66
password: cien66
changeLogFile: master.yml

liquibase.hub.mode=off

5.##更新

liquibase update            

6.##设置标签,方便回滚

liquibase tag v2            

7.##回滚

liquibase rollback v1        

8.常用命令

//版本
liquibase --version

//查看liquibase支持的所有命令
liquibase --help

//查看此个命令支持的参数选项信息
liquibase 命令 --help

//查看目标数据库是否能连接成功、pro证书信息是否有效(使用高级命令)
//当前目录需要有liquibase.properties文件
liquibase status

//前提:当前目录必须有liquibase.properties文件
//基于数据库信息生成一份原始changeLogFile文件
//数据库结构快照备份,备份完之后修改liquibase.properties的地址,运行 liquibase update 可快速迁移无需一个一个创建
liquibase generate-changelog

//前提:当前目录必须有liquibase.properties文件以及liquibase.properties定义的changeLogFile文件
//基于liquibase.properties属性里面定义的changeLogFile文件来更新、修改数据库
liquibase update


//前提:当前目录必须有liquibase.properties文件以及liquibase.properties定义的changeLogFile文件
//基于liquibase.properties属性里面定义的changeLogFile文件来更新、修改数据库(最多仅更新10个未部署的<changgeset>的语句,如果某个changeset之前已经部署过就不算)
liquibase updateCount 部署changeset节点的个数

//前提:当前目录必须有liquibase.properties文件以及liquibase.properties定义的changeLogFile文件
//基于changeLogFile的文件生成具体的真正可在数据库运行的SQL语句 == 仅仅生成SQL语句不会在数据库中生效,如果想让SQL语句的数据库生效请使用 liquibase update
liquibase update-sql


//其实就是展示databasechangelog的记录:FILENAME、ID、AUTHOR、DEPLOYMENT_ID
liquibase history


//比对数据库结构
//选项参数参看:liquibase diff --help 
//liquibase diff
//将比对结果保存在当前目录的diff.txt目录中  == 结果形式看下面的图片即可
//liquibase diff   --outputFile=diff.txt
//将比对结果保存在当前目录的diff.json目录中,且内容格式是json,结构化数据
//liquibase diff  --format=json --outputFile=diff.json
liquibase diff

//生成的文件,表示当前目标数据库在源库表结构相差的东西
//生成的文件最后可以使用(使得目标库与源库结构一致):liquibase update --changelog-file=diffChangelog.xml  
liquibase diff-changelog --changelog-file=diffChangelog.xml

//生成数据库结构、changlog文件内容显示 -- 仅能生成html文档
liquibase db-doc --output-directory=文档输出目录


//查看当前是否有用户在运行liquibase更改数据库结构 == 即表DATABASECHANGELOGLOCK是否有LOCKED=1的记录
liquibase list-locks

//释放锁 = 将表DATABASECHANGELOGLOCK的LOCKED=1的记录,修改LOCKED=0且将被锁的开始时间LOCKGRANTED、使用锁的IP地址LOCKEDBY都置空
//一般来说用不上,因为liquibase正常变更、退出会自动释放锁,如果非正常退出可能锁的状态没来得及释放,需要你手动执行该条命令释放,或者直接去数据库修改锁状态设为0即可
liquibase release-locks


//数据库结构快照 == 感觉跟 generate-changgelog差不多 == 文件存放在当前目录下
liquibase --outputFile=snapshot.text  snapshot --snapshot-format=text
liquibase --outputFile=snapshot.yml  snapshot --snapshot-format=yml
liquibase --outputFile=snapshot.json  snapshot --snapshot-format=json

//表结构回滚
liquibase rollback 标签名

//基于某个changelog文件,表结构回滚最新部署的某几条变更(将SQL作用到数据库,建议使用这条命令前,先用 rollback-count-sql确认一下SQL语句)
liquibase rollback-count  回滚最新部署的条数
//基于某个changelog文件,表结构回滚最新部署的SQL查看(未作用SQL部署到数据库,仅是看SQL的命令而已)
liquibase rollback-count-sql 回滚最新部署的条数




//表结构回滚到某一个时间节点的部署 == 原本部署的是新增,回滚即是删除,如果原本部署的是删除,回滚新增是不支持的
//下面的语句是等价于  liquibase rollback-to-date  yyyy-MM-dd 00:00:00
liquibase rollback-to-date  yyyy-MM-dd
//具体的时间节点 -- 更建议加上详细的时间点上去
liquibase rollback-to-date  yyyy-MM-dd HH:mm:ss

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值