sqlite管理工具_Liquibase 数据库版本管理工具:1.安装

ca0a68cd409f2b78404a3512c58a478f.png

1.Liquibase 是什么

粘一段官方的解释

Track, version, and deploy database changes
跟踪、管理和应用数据库变化

说白了,就是一个将你的数据库脚本转化为xml格式保存起来。

其中包含了你对数据库的改变,以及数据库的版本信息,方便数据的升级和回滚等操作。

目前支持:MySql、Maria DB、PostgreSQL、Oracle、SQL Server、DB2、HSQL、H2、SQLite等多种主流数据库。

2.为什么需要Liquibase

通常在项目正常推进的情况下,我们会有:开发、测试、压测、准生产、生产等多套环境。

伴随着迭代发版,我们需要不断同步多套环境的数据库信息,如果每个环境都需要开发人员手动去修改,那么就是一场灾难。

因为到最后,谁也记不得在哪个环境执行了哪个操作,结果就是测试一直在群里@开发,报错啦!!

因此我们需要一个可以自动化维护各个环境数据库版本差异的工具,将人力释放出来。

这也是程序的奥义,简化繁琐的操作

3.配置Liquibase环境

3.1.下载Liquibase

根据自己的操作系统下载对应的二进制包,下载地址:https://www.liquibase.org/download

579325355fc2bd289091a6081b1cfe2e.png

3.2.配置环境变量

配置方式同 Java ,将压缩文件解压,配置文件夹路径到PATH路径中。

以 Mac 为例,文件夹路径为:/Users/jiaotd/liquibase-4.0.0-beta1

修改 ~/.bash_profile 文件,添加如下配置

export LIQUIBASE_HOME=/Users/jiaotd/liquibase-4.0.0-beta1
export PATH=$PATH:$LIQUIBASE_HOME

执行 source ~/.bash_profile 加载环境变量

执行 liquibase --version 检查时候配置成功

b01d4aef6dc6621e09ae435ccb8c39a6.png

4.Liquibase支持的集成方式

Liquibase 支持集成的方式有多种

  • Command 命令行模式
  • Maven
  • Ant
  • Spring Boot

Maven 与 Spring Boot 类似,这里先介绍一下 Command 模式,Maven 与 Spring Boot 集成在以后的文章中再做详细介绍。

5.核心文件

不管哪种集成方式,Liquibase 最为核心的文件就是 changelog.xml,它记录了你对数据库的每一步操作,Liquibase 所以的操作都依赖于 changelog.xml 文件的内容。

空的 changelog.xml 内容如下:

<?xml version="1.0" encoding="utf-8"?>
<databaseChangeLogxmlns="http://www.liquibase.org/xml/ns/dbchangelog"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangeloghttp://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.4.xsd"></databaseChangeLog>

Liquibase 将每一步的数据库操作定义为一个 changeSet,格式如下:

<changeSet id="test-1" author="jiaotd"><sql>create table xxx(id int(11));</sql><sqlFile path="xxx.sql"/><rollback><sql>drop table xxx;</sql><sqlFile path="xxx-rollback.sql"/></rollback>
</changeSet>

在 changeSet 中,你可以直接使用 标签写 SQL 命令,可以通过 引入外置的 SQL 文件, 标签则是回滚时想要执行的操作。

6.核心表

Liquibase 本身拥有一个记录当前已操作的行为记录表:DATABASECHANGELOG

5bc95121d722a01820f34ebf42c9bcad.png

ID与AUTHOR 与 里一一对应

FILENAME:当前执行的 changeSet.xml 是哪一个

DATEEXECUTED:执行时间

ORDEREXECUTED:执行次序

EXECTYPE:执行状态

MD5SUM:SQL 文件的MD5 校验,请记得这个,后期将注意事项是会说到

TAG:版本号

LABELS:标签

7.Command

Liquibase 命令行由参数+指令构成,通过 liquibase --help 可以查看具体指令、参数及作用注释,这里截取一部分展示

9fcdba4029fdef9553f35bb3f128fc35.png

710e6bb12cced86d1ac51622141ee26d.png

通常情况下,我们对数据库最常用的操作就是升级回滚,对应 Liquibase 的指令就是updaterollback系列

7.1.update

liquibase --driver=$liquibase_driver --url=$MYSQL_DB_URL --username=$DB_USER --password=$PASSWORD --classpath=$liquibase_classpath --changeLogFile=文件路径/master.xml update

--classpath:数据库驱动路径

--changeLogFile :就是5中定义的 changelog.xml 文件路径,名称可以自定义,这里叫master.xml

执行这样的命令就可以将你定义的数据库操作同步到你想要同步的环境中

7.2.rollback

rollback 操作常用的有多个,分别是rollback ,rollbackToDate , rollbackCount

  • rollback :将数据库回退到指定的 tag 版本状态,tag 是对已操作的 changSet 版本记录,类似于 Git 的 tag,通过 liquibase tag 完成;
  • rollbackToDate :将数据库回退到指定的 date、 time 时间状态
  • rollbackCount :回退指定数量的 changSet ,每个 记为1;

举个栗子,当前已执行的

f123a6e1564837df8aa8510367276523.png
  • 执行 rollback v1.01 ,则序号8~14的操作会回滚,数据是执行了1~7操作的状态
  • 执行 rollbackToDate 2020-07-05,则时间是2020-07-05 之后的操作全部回滚
  • 执行 rollbackCount 5,则从后向前数 5 个操作,10~14 将会回滚,数据是执行了1~9操作的状态

本章简单介绍了一下 Liquibase 的使用,下章详细介绍 Command 的具体实践。


Liquibase 系列文章:

2.changelog 详解:

九人稚:数据库版本管理之Liquibase:2.changelog 详解​zhuanlan.zhihu.com
e7bb93d66d68f6bc08cbb9c74dcd7233.png

3. changeSet 变更集详解:

九人稚:Liquibase 数据库版本管理工具:3. changeSet 变更集详解​zhuanlan.zhihu.com
e7bb93d66d68f6bc08cbb9c74dcd7233.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/430235.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

BZOJ2720: [Violet 5]列队春游

2720: [Violet 5]列队春游 Time Limit: 5 Sec Memory Limit: 128 MBSubmit: 173 Solved: 125[Submit][Status][Discuss]Description Input Output Sample Input Sample Output HINT 题解&#xff1a;对于这种题目我只能呵呵一笑欺负我是单身汪&#xff0c;哎&#xff01; 一、…

win7下卸载linux系统(不用windows光盘)

前言 安装win7Linux双系统后&#xff0c;不想用了&#xff0c;该怎么卸载呢&#xff1f;其实&#xff0c;只要删除Linux分区即可删除掉Linux&#xff0c;但是&#xff0c;为了防止启动进不了windows&#xff0c;还是要更新一下主引导记录。 步骤一&#xff1a;使用MbrFix工具…

python 文本处理库_推荐8种目前Python使用率最高的文本处理工具

前言 文本处理一般包括词性标注&#xff0c;句法分析&#xff0c;关键词提取&#xff0c;文本分类&#xff0c;情感分析等等&#xff0c;这是针对中 文的&#xff0c;如果是对于英文来说&#xff0c;只需要基本的tokenize。本文为大家提供了以下这些工具包。我整理了Python的相…

面向对象(二)——三大特性(封装、继承、多态)

一、封装 目的&#xff1a;保护类&#xff0c;让类更加安全。 做法&#xff1a;让类里面的成员变量变为私有&#xff08;即访问修饰符&#xff09;的&#xff0c;做相应的方法或者属性去间接的操作成员变量 ※访问修饰符 private 私有的 只能在该类中访问 protec…

利用伸展树提高区间操作的性能

一、首先&#xff0c;什么是区间操作&#xff1f;以及各种数据结构性能对比 区间操作就是对一个序列的某个区间的所有元素进行的操作。比如&#xff0c;对区间所有元素增加一个值&#xff0c;翻转区间元素等。 对区间操作&#xff0c;最普通的方法就是数组。比如&#xff1a;…

python书写风格_以下两种风格 Python 写法,请问大家倾向哪种:)

看到不同的同事代码&#xff0c;表达同一个意思&#xff0c;主要 if 部分以下哪种写法比较好些&#xff1a;&#xff09; 第一种写法 def xxxx(ph, sin_id): """ """ with OracleConnect(xxxx) as db_oracle: sql u"xxxxx" has_data,…

中科大开源镜像使用帮助列表

https://lug.ustc.edu.cn/wiki/mirrors/help转载于:https://www.cnblogs.com/hikecn/p/5797959.html

伸展树的代码实现

一、伸展树的数据结构 typedef struct Node {int key; struct Node *lch,*rch,*parent; }* Node ,* Tree; 二、伸展树的基础操作 下面几个函数中&#xff0c;设x 的父节点为 p, p的父节点为g 。 zig( t , x ) 右旋。当p是根节点&#xff0c;x是p的左孩子&#xff0c;将…

枚举命名规范_UE4 C++基础教程 - 编码规范

为什么要学习编码规范&#xff1f;良好的编码规范不仅利于项目维护&#xff0c;也增加了代码辨识度。使我们在阅读代码时能够更加清晰的理解代码意图。维护编码规范不是一件机械化的工作&#xff0c;它更像是一门艺术&#xff0c;让我们在有限的规范内发挥自己的创造力。除此之…

Cocos2d-x之Log输出机制

| 版权声明&#xff1a;本文为博主原创文章&#xff0c;未经博主允许不得转载。 在cocos2d-x中&#xff0c;我们使用log这个函数进行输出&#xff0c;log可以输出很多参数&#xff0c;它的使用方式就和使用c语言中的printf的使用方式差不多。log其实是一个跨平台的日志输出的…

最佳单例模式

initialization on demand holder 模式分析 单例模式要求在应用运行的过程中&#xff0c;只有一个类的实例存在。因此&#xff0c;要确保创建过程是线程安全的&#xff0c;同时要兼顾性能。目前了解到做得比较好的&#xff0c;就是这种initialization on demand holder模式&am…

python接口测试jason_Python 接口测试之Json数据文件操作

引言 前面说过接口测试就是数据的测试&#xff0c;在测试之前&#xff0c;需要准备好测试数据&#xff0c;而测试数据可以用数据库、excel、txt和csv方式&#xff0c;当然还有一种方式&#xff0c;那就是使用json文件来储存测试数据。常用的方式就是这些。 设计思路 python读取…

城市轮廓线求解

问题描述 每一个建筑物用一个三元组表示(L, H, R), 表示左边界, 高度和右边界,轮廓线用X,Y,X,Y…这样的交替式表示,给N个建筑&#xff0c;求轮廓线。 总体思路 首先&#xff0c;要将建筑物离散成点或线&#xff0c;方便运算。将建筑物表示成&#xff08;L,H&#xff09;,(R,…

wpf的listbox循环数据滚动_滚动版 CentOS Stream 和 Fedora 的关系

如果 CentOS 现在位于 RHEL 的上游&#xff0c;那么 Fedora 会发生什么&#xff1f;那不是 Fedora 在 Red Hat 生态系统中的角色吗&#xff1f;-- Matthew Miller&#xff08;作者&#xff09;一封来自 Fedora 项目负责人办公室的信件&#xff1a;&#xff08;LCTT 译注&#x…

位运算的妙用

位运算所有语言里面都有位运算&#xff0c;&&#xff0c;|,^,~,<<,>>,>>>&#xff0c;但是其他语言不清楚&#xff0c;前端估计许多人直接一扫而过&#xff0c;甚至把这玩意和逻辑或与混淆&#xff0c;甚至有的不认识<<,>>>,问这什么意…

AJAX中的跨域问题:什么是跨域?如何解决跨域问题?

域不一样的&#xff0c;即为跨域&#xff0c;包括&#xff08;协议&#xff0c;域名&#xff0c;端口号&#xff09; 1. 指定允许其他域名访问 header(Access-Control-Allow-Origin:*); 2.使用jsonp转载于:https://www.cnblogs.com/luckyXcc/p/5805909.html

求无序序列每个元素最接近的值

1、问题描述 给一个n个元素的线性表A&#xff0c;对于每个数Ai&#xff0c;找到它之前的数中&#xff0c;和它最接近的数。 即对于每个i&#xff0c;求 Ci min{ |Ai -Aj | | 1< j < i} 1.2算法分析 有两种思路可以解决上诉问题&#xff1a; &#xff08;1&#xff0…

python把list转成字典_python中将list转为dict

最近在项目中经常遇到将list转为dict形式&#xff0c;之前都只会用for循环&#xff0c;取出list中的每个值&#xff0c;update到dict中。 示例1 scrabble_scores [(1, "E A O I N R T L S U"), (2, "D G"), (3, "B C M P"), (4, "F H V W …

maven引入springframework的猫腻

看官网的quickstart&#xff0c;以为maven只要将quickstart里的配置复制到项目里就好了&#xff0c;但是在项目中使用jdbc和事物时&#xff0c;都提示找不到相关的类&#xff0c;才知道原来官网文档还有猫腻。 maven引入spring框架 project下框架有点多&#xff0c;点spring …

BAT批量处理 命令

第一章 批处理基础第一节 常用批处理内部命令简介批处理定义&#xff1a;顾名思义&#xff0c;批处理文件是将一系列命令按一定的顺序集合为一个可执行的文本文件&#xff0c;其扩展名为BAT或者CMD。这些命令统称批处理命令。小知识&#xff1a;可以在键盘上按下CtrlC组合键来强…