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