1.使用liquibase
集成依赖

	<liquibase.version>4.1.1</liquibase.version>
<dependency>
<groupId>org.liquibase</groupId>
<artifactId>liquibase-core</artifactId>
<version>${liquibase.version}</version>
</dependency>

项目数据源配置文件中加入liquibase配置信息

	@Bean(name = "dataSource")
@ConfigurationProperties(prefix="spring.datasource.mysql")
public DataSource dataSource(){
DataSource dataSource = DataSourceBuilder.create().build();
return dataSource;
}
@Bean
public SpringLiquibase liquibase(@Qualifier("dataSource") DataSource dataSource) {
SpringLiquibase liquibase = new SpringLiquibase();
liquibase.setChangeLog("classpath:mysql/master.xml");//liquibase xml路径
liquibase.setDataSource(dataSource);
liquibase.setShouldRun(true);
return liquibase;
}

配置信息

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<databaseChangeLog logicalFilePath="db.changelog-master.xml" 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">
<!--扫描sql脚本文件路径-->
<includeAll path="/mysql/*.sql" relativeToChangelogFile="true"/>
</databaseChangeLog>

2.常见错误

2021-08-25 10:15:13.476 INFO  -[Slf4jLogger.java:42]- Waiting for changelog lock....
表被锁 项目启动不了 需要设置DATABASECHANGELOGLOCK表字段LOCKED为0

已运行的changeSet修改后,liquibase检查篡改报错。

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'liquibase' defined in class path resource [Config.class]: Invocation of init method failed; nested exception is liquibase.exception.ValidationFailedException: Validation Failed:
1 change sets check sum ids.sql::123::author was: 8:db5395481a0664c2794b7ac2399b3f22 but is now: 8:21e277195677c9252df3cad3f4cc368d

已经运行的changeSet记录会存入DATABASECHANGELOG中
解决办法:
1.根据返回的最新(now)MD5SUM值修改对应的数据库MD5SUM的值。数据库手动添加改变的sql命令。
2.删除对应的sql操作,及删除databasechangelog表中对应的记录

(2)执行sql脚本常见信息

Index column size too large. The maximum column size is 767 bytes.
MySQL Innodb索引字段长度最大为767字节,如果索引大小超过767字节则会引发该错误。
解决办法:
如果mysql安装在本地 需要手动修改配置:
查看状态:show variables like 'innodb_large_prefix';
设置属性:set global innodb_large_prefix='on';
如果是云数据库 在配置里面设置
innodb_large_prefix :ON 默认为OFF

liquibase初始化sql的更多相关文章

  1. DevExpress后置代码中初始化SQL数据源的方法

    //初始化SQL数据源的提供者和连接字符串 函数 OK public virtual void InitSqlDataSource_ConStr(SqlDataSource sql_ds) { Con ...

  2. mysql数据库-初始化sql建库建表-关联查询投影问题

    下面是一个简易商城的几张表的创建方式 drop database if exists shop ; create database shop CHARACTER SET 'utf8' COLLATE ...

  3. 021.Docker mysql启动时执行初始化sql

    1.拉取Mysql镜像 # docker pull mysql:5.7 2.检查mysql镜像 # docker inspect mysql:5.7 ## "Entrypoint" ...

  4. MicroERP数据初始化SQL脚本

    --use MicroERP insert into tbUserGroup(GroupName,Remark) values('管理员组','具备所有权限')insert into tbUser(L ...

  5. SQL Server 通过备份文件初始化复制

    一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 搭建过程(Process) 注意事项(Attention) 疑问(Questions) 参考文 ...

  6. SQL Server 通过备份文件初始化复制 – 听风吹雨

    一.背景 MySQL在对有历史数据的数据库进行搭建复制(Master/Slave)的时候,可以通过在Master服务器备份历史数据,利用这个备份文件 在Slave进行还原:这样做的好处是可以更加快速的 ...

  7. SpringBoot2.x整合JDBC及初始化data.sql和schema.sql脚本

    今天在使用SpringBoot2.x版本整合JDBC时遇到了一些问题:由于我之前一直用SpringBoot1.5的版本,所以直接在yml里按照1.5的版本配置了属性,没想到2.x直接不能用了.首先是数 ...

  8. Liquibase的简单使用

    LiquiBase是一个用于数据库重构和迁移的开源工具,通过日志文件的形式记录数据库的变更,然后执行日志文件中的修改,将数据库更新或回滚到一致的状态.它的目标是提供一种数据库类型无关的解决方案,通过执 ...

  9. Liquibase使用小结

    简介 Liquibase是一个用于跟踪.管理和应用数据库变化的开源数据库重构工具.它将所有数据库的变化保存在XML文件中,便于版本控制和项目部署升级.在快速搭建项目的JHipster框架中集成了该工具 ...

  10. 分析MariaDB初始化脚本mysql_install_db

    在初始化MySQL的过程中经常会碰到各种问题,如 FATAL ERROR: Could not find ./bin/my_print_defaults ERROR: Can't create/wri ...

随机推荐

  1. java注解和反射(Annotation and Reflect)

    摘要: 注解和反射是相互联系的知识,所以应该放到一起来说. 注解:JDK5之后才有的技术,为了增加对元数据的支持,可以将注解理解为代码中的特殊标记,一种修饰.而这些标记是可以在代码编译,类的加载,和运 ...

  2. Hyperkernel验证实验的复现与z3环境初识

    Hyperkernel验证实验的复现与z3环境初识 前言 建议顺序阅读本文!禁止转载.--@CarpVexing(https://www.cnblogs.com/CarpVexing/p/159483 ...

  3. C# 将实体转xml/xml转实体

    xml转实体 /// <summary> /// 把xml转换成实体 /// </summary> /// <typeparam name="T"&g ...

  4. ls和mkdir

    ls  查看当前目录的内容 1) ls -l 显示详细列表 2) Ls -lh 吧文件大小以人性化的方式展开 3) ls -a 显示所有的文件,包括隐藏文件,隐藏文件是已.开头的文件 4) ll 等于 ...

  5. 第八次团队作业:Beta冲刺(凡事预则立)

    这个作业属于哪个课程 2018级计算机和综合实验班 这个作业要求在哪里 Beta冲刺要求 这个作业的目标 Beta冲刺 改进完善的功能 完善之前年度报告功能 尽快上线小程序 增加的新功能 小程序打卡功 ...

  6. win10、win11安装子系统kali linux、图形化界面的安装

    1.开启安装Linux子系统需要的扩展 Win+Q搜索功能 勾选需要的扩展,Hyper-V.Windows 虚拟机监控平台.适用于Linux的Windows子系统.虚拟机平台 反正这些有关于虚拟机的全 ...

  7. ACM需要知道的STL小技巧

    天天用stl,但是有一些小技巧如果不知道,偶尔会导致TLE,这里说几个打比赛需要用到的. 主要是大概了解一下其底层原理:https://www.jianshu.com/p/834cc223bb57 就 ...

  8. .Net7 CLR的调用函数和编译函数

    前言 .Net运行模型,无非就两个过程.一个是调用入口函数,另外一个就是编译入口函数.前者主调用,后者主编译. 概括 一:入口函数:RunMainInternal 所有的.Net程序,包括控制台,We ...

  9. JUC源码学习笔记8——ConcurrentHashMap源码分析1 如何实现低粒度锁的插入,如何实现统计元素个数,如何实现并发扩容迁移

    源码基于jdk1.8 这一片主要讲述ConcurrentHashMap如何实现低粒度锁的插入,如何实现统计元素个数,如何实现并发扩容迁移 系列文章目录和关于我 一丶ConcurrentHashMap概 ...

  10. 源码解读之FutureTask如何实现最大等待时间

    预备知识:Java 线程挂起的常用方式有以下几种 Thread.sleep(long millis):这个方法可以让线程挂起一段时间,并释放 CPU 时间片,等待一段时间后自动恢复执行.这种方式可以用 ...