官网: docs.liquibase.com/commands/up…
liquibase update-testing-rollback SQL查看 future-rollback-sql - 查看未部署运行的changeSet的回滚语句 官网: docs.liquibase.com/commands/ro… liquibase futureRollbackSQL 官网: docs.liquibase.com/commands/ho… 查看即将回滚的SQL命令 所有回滚操作的命令 回滚、更新部署方式通过标签-设置回滚点(标签方式 tag 标签名)、rollback 标签名 官网: docs.liquibase.com/commands/ro… 特别注意: 如果liquibase update的时候不是使用liquibase.properties里面定义的changeLogFile文件,而是命令行特别指定的文件即–changeLogFile的文件,则你回滚标签的时候也是需要指定你update时的–changeLogFile文件,这样liquibase才会知道你需要回滚的东西是什么 官方推荐实践1: 每次新部署前,最好先设置一个回滚点即新标签作为回滚标记 liquibase tag 新标签名 官方推荐实践2: 运行 【rollback 标签名】 回滚前,请先运行 【rollback -sql 标签名】 确认即将执行的回滚SQL是你想要的,毕竟回滚很可能涉及到删表操作,谨慎为主哦! 回滚点创建方式 方式1:命令行 - 官方推荐 注意: 如果DATABASECHANGELOG表无记录,运行此命令会创建一条记录出来,如果DATABASECHANGELOG有记录,则将最后一条(最新一条)记录中tag属性设置为回滚点标签名 liquibase tag 回滚点标签名 方式2:xml节点 - 个人更建议使用这个 官方: docs.liquibase.com/change-type… 注意: 每次都是创建一个新记录到DATABASECHANGELOG表中 changelog.xml <?xml version="1.1" encoding="UTF-8" standalone="no"?> <databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext" xmlns:pro="http://www.liquibase.org/xml/ns/pro" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog-ext http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-ext.xsd http://www.liquibase.org/xml/ns/pro http://www.liquibase.org/xml/ns/pro/liquibase-pro-4.12.xsd http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-latest.xsd"> <!--回滚点version_1.3--> <changeSet author="liquibase-docs" id="tagDatabase-example"> <tagDatabase tag="version_1.3"/> </changeSet> <changeSet author="root (generated)" id="1657564981926-1"> <createTable tableName="person_a8"> <column name="id" type="INT"> <constraints nullable="false" primaryKey="true"/> </column> <column name="name" type="VARCHAR(50)"> <constraints nullable="false"/> </column> <column name="address1" type="VARCHAR(50)"/> <column name="address2" type="VARCHAR(50)"/> <column name="city" type="VARCHAR(30)"/> </createTable> </changeSet> <changeSet author="root (generated)" id="1657564981926-2"> <createTable tableName="test"> <column name="id" type="INT"> <constraints nullable="false" primaryKey="true"/> </column> </createTable> </changeSet> </databaseChangeLog> //然后运行部署 liquibase update //设置当前的数据库状态为 标签名1 //其实质就是在DATABASECHANGELOG表的最新一条记录的tag列加上【标签名】 //如果没有DATABASECHANGELOG没有记录,也会补一条DESCRIPTION=empty的行记录作为标记 liquibase tag 标签名 //执行更新 liquibase update //将数据库的结构状态回滚到执行liquibase update更新之前的结构 liquibase rollback 标签名 备份当前数据库状态 官网: docs.liquibase.com/commands/ho… 所有备份数据库的命令 snapshot - 仅仅只是用来看的并不能重新部署到数据库 官网: docs.liquibase.com/commands/sn… 注意: yml、json格式可用于到时比对源库用于生成diffChangelog文件的,建议–snapshot-format设置为这两种格式,而不是使用默认的 //查看snapshot的命令选项 liquibase snapshot --help //当前数据库结构状态 liquibase snapshot //控制台输出:三种格式输出:txt(默认)、json、yaml //yml、json格式可用于生成diffChangelog文件 liquibase snapshot --snapshot-format=json //输出到文件中 liquibase snapshot --snapshot-format=json --output-file=文件名.json 控制台输出 generate-changelog - 将当前的数据库状态以changelog文件输出到时可以部署到新数据库中 官网: docs.liquibase.com/commands/sn… //查看snapshot的命令选项 liquibase generate-changelog --help //当前数据库结构状态 liquibase generate-changelog --changelog-file=20220711snapshot.xml //部署到新数据库中 liquibase --changelog-file=20220711snapshot.xml update 数据库比对 官网: docs.liquibase.com/commands/ho… 库与库的比对 最简单的自行摸索 库与snapshot文件的比对 本地数据库结构Url编写: offline:数据库类型?snapshot=snapshot文件路径 //备份当前lrc_blog3的数据库状态以lrc_blog3_snapshot.yml文件形式保存 liquibase snapshot --output-file=lrc_blog3_snapshot.yml --snapshot-format=yml //比对源库lrc_blog与目标库lrc_blog3_snapshot.yml 数据库结构直接的区别,然后生成diffChangeLog.xml文件,到时直接将changlog-file设置成diffChangeLog.xml,然后update就可以将lrc_blog3的数据库结构变成跟lrc_blog一样 liquibase --url=offline:mysql?snapshot=lrc_blog3_snapshot.yml diffChangeLog --changelog-file=diffChangeLog.xml //将lrc_blog3的结构变成lrc_blog liquibase --changelog-file=diffChangeLog.xml update 部署、维护 update、update-sql(整个changelog文件直接部署)- 最常用 官网: docs.liquibase.com/commands/up… update-to-tag、update-to-tag-sql(changelog文件阶段性分部分(回滚点)的部署)- 建议常用这个取代update 官网: docs.liquibase.com/commands/up… 作用: 由于liquibase是按changeset节点在changelog的位置,按顺序的执行,这就导致可以在changeset之间设置一个标签(回滚点) () ,此命令只会部署当前节点以及当前标签节点之前的changeset节点,后面的直接忽略 //查看运行update-to-tag的SQL操作 liquibase update-to-tag-sql 标签名(回滚点) //根据标签进行部署changelog文件 liquibase update-to-tag 标签名(回滚点) changelog-sync 官网: docs.liquibase.com/commands/ma… 作用: 仅仅只是将changeLogFile里面的每条的changeset记录在DATABASECHANGELOG表中标记已经执行(但其实没执行任何有关changeLogFile里面的DDL语句) 使用场景: 某个项目中途引入了liquibase管理表结构SQL,一开始先使用generate-changelog生成当前数据库的表结构changelog文件,但是当你update的时候会直接报错,因为这些表都已经在当前数据库存在了,现在你只需要运行change-sync,默认当前changelog文件里面的SQL都是已经执行过的,在DATABASECHANGELOG表生成每个changeset执行记录,且EXECTYPE标记为已经执行EXECUTED,然后在udpate就不会报错了 clearCheckSums 官网: docs.liquibase.com/commands/ma… 官方定义: learn.liquibase.com/unit/view/i… 已升级 Liquibase 并希望使用最新版本重新计算校验和 开发中,您可能已经创建了多个更改,并希望通过操作changelog将这些更改组合成一个单一的变更集。您可能需要清除校验和才能完成此任务。 对存储的逻辑进行了更改,并使用与以前相同的文件,并希望使用新的存储逻辑来代替(这不是最佳实践,但可以这样做,因为存储的逻辑可以一遍又一遍地运行)。 想要克服错误,但不希望更改在下一次更新时运行。 开发人员修改了几个已经部署的脚本,现在 Liquibase update由于校验和错误而失败。 注意: 即使databasechangelog的记录标记已经执行,但只要update,liquibase都会去校验每条changset的MD5值,然后跟数据库存储的md5值进行不对,如果对不上则报错,没有则会填充进去数据库,然后下次update的时候在进行比对 mark-next-changeset-ran、mark-next-changeset-ran-sql 官网: docs.liquibase.com/commands/ma… 应用场景: 生产紧急情况,你手动上数据库进行更新数据库结构未经过liquibase运行,但你还是会在liquibase备份一份作为曾经执行过的DDL,但是该条changeset由于没有经liquibase执行,导致databasechangelog没有记录,则liquibase又会在执行一遍到时就报错了,所以避免这种由于紧急情况手动更改数据库但在liquibase有留changeset记录的,则使用markNextChangeSetRan命令让liquibase基于changelog生成一份已执行的databasechangelog记录,但不会将changset的SQL又重新作用于liquibase,相对于update,其实就是少执行了changset里面的SQL语句而已 //基于changlog生成一条未在databasechangelog存在的记录,并将其标记为已经执行 liquibase markNextChangeSetRan //查看运行markNextChangeSetRan的话将执行的SQL语句 liquibase markNextChangeSetRanSQL status:查看还有多少changeset是待部署状态 官网: docs.liquibase.com/commands/st… liquibase status --help //仅显示未部署的条数 liquibase status //建议使用这个:显示未部署条数以及哪些changeset没部署 liquibase status --verbose history:查看历史部署 官网: docs.liquibase.com/commands/st… liquibase history unexpected-changesets:排查出databasechangelog有部署日志但changlog文件没有changeset节点的databasechangelog记录(以整个databasechangelog表为准) 官网: docs.liquibase.com/commands/ma… //仅提示异常数量 liquibase unexpected-changesets //异常数量以及棘具体异常的标识也显示出来id、author liquibase unexpected-changesets --verbose 官网: docs.liquibase.com/change-type… 总结1: 涉及新增的结构、约束才支持回滚即生成回滚语句是:删除结构、约束,反过来则不支持自动回滚语句生成,需要自己自定义回滚语句节点 总结2: 如果不想语句有回滚语句,则在changeSet节点里面添加个空的节点 分类: 后端 标签: Java 安装掘金浏览器插件 多内容聚合浏览、多引擎快捷搜索、多工具便捷提效、多模式随心畅享,你想要的,这里都有! 前往安装 Java开发
官网: docs.liquibase.com/commands/ro…
liquibase futureRollbackSQL 官网: docs.liquibase.com/commands/ho… 查看即将回滚的SQL命令 所有回滚操作的命令 回滚、更新部署方式通过标签-设置回滚点(标签方式 tag 标签名)、rollback 标签名 官网: docs.liquibase.com/commands/ro… 特别注意: 如果liquibase update的时候不是使用liquibase.properties里面定义的changeLogFile文件,而是命令行特别指定的文件即–changeLogFile的文件,则你回滚标签的时候也是需要指定你update时的–changeLogFile文件,这样liquibase才会知道你需要回滚的东西是什么 官方推荐实践1: 每次新部署前,最好先设置一个回滚点即新标签作为回滚标记 liquibase tag 新标签名 官方推荐实践2: 运行 【rollback 标签名】 回滚前,请先运行 【rollback -sql 标签名】 确认即将执行的回滚SQL是你想要的,毕竟回滚很可能涉及到删表操作,谨慎为主哦! 回滚点创建方式 方式1:命令行 - 官方推荐 注意: 如果DATABASECHANGELOG表无记录,运行此命令会创建一条记录出来,如果DATABASECHANGELOG有记录,则将最后一条(最新一条)记录中tag属性设置为回滚点标签名 liquibase tag 回滚点标签名 方式2:xml节点 - 个人更建议使用这个 官方: docs.liquibase.com/change-type… 注意: 每次都是创建一个新记录到DATABASECHANGELOG表中 changelog.xml <?xml version="1.1" encoding="UTF-8" standalone="no"?> <databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext" xmlns:pro="http://www.liquibase.org/xml/ns/pro" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog-ext http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-ext.xsd http://www.liquibase.org/xml/ns/pro http://www.liquibase.org/xml/ns/pro/liquibase-pro-4.12.xsd http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-latest.xsd"> <!--回滚点version_1.3--> <changeSet author="liquibase-docs" id="tagDatabase-example"> <tagDatabase tag="version_1.3"/> </changeSet> <changeSet author="root (generated)" id="1657564981926-1"> <createTable tableName="person_a8"> <column name="id" type="INT"> <constraints nullable="false" primaryKey="true"/> </column> <column name="name" type="VARCHAR(50)"> <constraints nullable="false"/> </column> <column name="address1" type="VARCHAR(50)"/> <column name="address2" type="VARCHAR(50)"/> <column name="city" type="VARCHAR(30)"/> </createTable> </changeSet> <changeSet author="root (generated)" id="1657564981926-2"> <createTable tableName="test"> <column name="id" type="INT"> <constraints nullable="false" primaryKey="true"/> </column> </createTable> </changeSet> </databaseChangeLog> //然后运行部署 liquibase update //设置当前的数据库状态为 标签名1 //其实质就是在DATABASECHANGELOG表的最新一条记录的tag列加上【标签名】 //如果没有DATABASECHANGELOG没有记录,也会补一条DESCRIPTION=empty的行记录作为标记 liquibase tag 标签名 //执行更新 liquibase update //将数据库的结构状态回滚到执行liquibase update更新之前的结构 liquibase rollback 标签名 备份当前数据库状态 官网: docs.liquibase.com/commands/ho… 所有备份数据库的命令 snapshot - 仅仅只是用来看的并不能重新部署到数据库 官网: docs.liquibase.com/commands/sn… 注意: yml、json格式可用于到时比对源库用于生成diffChangelog文件的,建议–snapshot-format设置为这两种格式,而不是使用默认的 //查看snapshot的命令选项 liquibase snapshot --help //当前数据库结构状态 liquibase snapshot //控制台输出:三种格式输出:txt(默认)、json、yaml //yml、json格式可用于生成diffChangelog文件 liquibase snapshot --snapshot-format=json //输出到文件中 liquibase snapshot --snapshot-format=json --output-file=文件名.json 控制台输出 generate-changelog - 将当前的数据库状态以changelog文件输出到时可以部署到新数据库中 官网: docs.liquibase.com/commands/sn… //查看snapshot的命令选项 liquibase generate-changelog --help //当前数据库结构状态 liquibase generate-changelog --changelog-file=20220711snapshot.xml //部署到新数据库中 liquibase --changelog-file=20220711snapshot.xml update 数据库比对 官网: docs.liquibase.com/commands/ho… 库与库的比对 最简单的自行摸索 库与snapshot文件的比对 本地数据库结构Url编写: offline:数据库类型?snapshot=snapshot文件路径 //备份当前lrc_blog3的数据库状态以lrc_blog3_snapshot.yml文件形式保存 liquibase snapshot --output-file=lrc_blog3_snapshot.yml --snapshot-format=yml //比对源库lrc_blog与目标库lrc_blog3_snapshot.yml 数据库结构直接的区别,然后生成diffChangeLog.xml文件,到时直接将changlog-file设置成diffChangeLog.xml,然后update就可以将lrc_blog3的数据库结构变成跟lrc_blog一样 liquibase --url=offline:mysql?snapshot=lrc_blog3_snapshot.yml diffChangeLog --changelog-file=diffChangeLog.xml //将lrc_blog3的结构变成lrc_blog liquibase --changelog-file=diffChangeLog.xml update 部署、维护 update、update-sql(整个changelog文件直接部署)- 最常用 官网: docs.liquibase.com/commands/up… update-to-tag、update-to-tag-sql(changelog文件阶段性分部分(回滚点)的部署)- 建议常用这个取代update 官网: docs.liquibase.com/commands/up… 作用: 由于liquibase是按changeset节点在changelog的位置,按顺序的执行,这就导致可以在changeset之间设置一个标签(回滚点) () ,此命令只会部署当前节点以及当前标签节点之前的changeset节点,后面的直接忽略 //查看运行update-to-tag的SQL操作 liquibase update-to-tag-sql 标签名(回滚点) //根据标签进行部署changelog文件 liquibase update-to-tag 标签名(回滚点) changelog-sync 官网: docs.liquibase.com/commands/ma… 作用: 仅仅只是将changeLogFile里面的每条的changeset记录在DATABASECHANGELOG表中标记已经执行(但其实没执行任何有关changeLogFile里面的DDL语句) 使用场景: 某个项目中途引入了liquibase管理表结构SQL,一开始先使用generate-changelog生成当前数据库的表结构changelog文件,但是当你update的时候会直接报错,因为这些表都已经在当前数据库存在了,现在你只需要运行change-sync,默认当前changelog文件里面的SQL都是已经执行过的,在DATABASECHANGELOG表生成每个changeset执行记录,且EXECTYPE标记为已经执行EXECUTED,然后在udpate就不会报错了 clearCheckSums 官网: docs.liquibase.com/commands/ma… 官方定义: learn.liquibase.com/unit/view/i… 已升级 Liquibase 并希望使用最新版本重新计算校验和 开发中,您可能已经创建了多个更改,并希望通过操作changelog将这些更改组合成一个单一的变更集。您可能需要清除校验和才能完成此任务。 对存储的逻辑进行了更改,并使用与以前相同的文件,并希望使用新的存储逻辑来代替(这不是最佳实践,但可以这样做,因为存储的逻辑可以一遍又一遍地运行)。 想要克服错误,但不希望更改在下一次更新时运行。 开发人员修改了几个已经部署的脚本,现在 Liquibase update由于校验和错误而失败。 注意: 即使databasechangelog的记录标记已经执行,但只要update,liquibase都会去校验每条changset的MD5值,然后跟数据库存储的md5值进行不对,如果对不上则报错,没有则会填充进去数据库,然后下次update的时候在进行比对 mark-next-changeset-ran、mark-next-changeset-ran-sql 官网: docs.liquibase.com/commands/ma… 应用场景: 生产紧急情况,你手动上数据库进行更新数据库结构未经过liquibase运行,但你还是会在liquibase备份一份作为曾经执行过的DDL,但是该条changeset由于没有经liquibase执行,导致databasechangelog没有记录,则liquibase又会在执行一遍到时就报错了,所以避免这种由于紧急情况手动更改数据库但在liquibase有留changeset记录的,则使用markNextChangeSetRan命令让liquibase基于changelog生成一份已执行的databasechangelog记录,但不会将changset的SQL又重新作用于liquibase,相对于update,其实就是少执行了changset里面的SQL语句而已 //基于changlog生成一条未在databasechangelog存在的记录,并将其标记为已经执行 liquibase markNextChangeSetRan //查看运行markNextChangeSetRan的话将执行的SQL语句 liquibase markNextChangeSetRanSQL status:查看还有多少changeset是待部署状态 官网: docs.liquibase.com/commands/st… liquibase status --help //仅显示未部署的条数 liquibase status //建议使用这个:显示未部署条数以及哪些changeset没部署 liquibase status --verbose history:查看历史部署 官网: docs.liquibase.com/commands/st… liquibase history unexpected-changesets:排查出databasechangelog有部署日志但changlog文件没有changeset节点的databasechangelog记录(以整个databasechangelog表为准) 官网: docs.liquibase.com/commands/ma… //仅提示异常数量 liquibase unexpected-changesets //异常数量以及棘具体异常的标识也显示出来id、author liquibase unexpected-changesets --verbose 官网: docs.liquibase.com/change-type… 总结1: 涉及新增的结构、约束才支持回滚即生成回滚语句是:删除结构、约束,反过来则不支持自动回滚语句生成,需要自己自定义回滚语句节点 总结2: 如果不想语句有回滚语句,则在changeSet节点里面添加个空的节点 分类: 后端 标签: Java 安装掘金浏览器插件 多内容聚合浏览、多引擎快捷搜索、多工具便捷提效、多模式随心畅享,你想要的,这里都有! 前往安装 Java开发
官网: docs.liquibase.com/commands/ho…
官网: docs.liquibase.com/commands/ro… 特别注意: 如果liquibase update的时候不是使用liquibase.properties里面定义的changeLogFile文件,而是命令行特别指定的文件即–changeLogFile的文件,则你回滚标签的时候也是需要指定你update时的–changeLogFile文件,这样liquibase才会知道你需要回滚的东西是什么 官方推荐实践1: 每次新部署前,最好先设置一个回滚点即新标签作为回滚标记 liquibase tag 新标签名 官方推荐实践2: 运行 【rollback 标签名】 回滚前,请先运行 【rollback -sql 标签名】 确认即将执行的回滚SQL是你想要的,毕竟回滚很可能涉及到删表操作,谨慎为主哦!
注意: 如果DATABASECHANGELOG表无记录,运行此命令会创建一条记录出来,如果DATABASECHANGELOG有记录,则将最后一条(最新一条)记录中tag属性设置为回滚点标签名
liquibase tag 回滚点标签名 方式2:xml节点 - 个人更建议使用这个 官方: docs.liquibase.com/change-type… 注意: 每次都是创建一个新记录到DATABASECHANGELOG表中 changelog.xml <?xml version="1.1" encoding="UTF-8" standalone="no"?> <databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext" xmlns:pro="http://www.liquibase.org/xml/ns/pro" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog-ext http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-ext.xsd http://www.liquibase.org/xml/ns/pro http://www.liquibase.org/xml/ns/pro/liquibase-pro-4.12.xsd http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-latest.xsd"> <!--回滚点version_1.3--> <changeSet author="liquibase-docs" id="tagDatabase-example"> <tagDatabase tag="version_1.3"/> </changeSet> <changeSet author="root (generated)" id="1657564981926-1"> <createTable tableName="person_a8"> <column name="id" type="INT"> <constraints nullable="false" primaryKey="true"/> </column> <column name="name" type="VARCHAR(50)"> <constraints nullable="false"/> </column> <column name="address1" type="VARCHAR(50)"/> <column name="address2" type="VARCHAR(50)"/> <column name="city" type="VARCHAR(30)"/> </createTable> </changeSet> <changeSet author="root (generated)" id="1657564981926-2"> <createTable tableName="test"> <column name="id" type="INT"> <constraints nullable="false" primaryKey="true"/> </column> </createTable> </changeSet> </databaseChangeLog> //然后运行部署 liquibase update //设置当前的数据库状态为 标签名1 //其实质就是在DATABASECHANGELOG表的最新一条记录的tag列加上【标签名】 //如果没有DATABASECHANGELOG没有记录,也会补一条DESCRIPTION=empty的行记录作为标记 liquibase tag 标签名 //执行更新 liquibase update //将数据库的结构状态回滚到执行liquibase update更新之前的结构 liquibase rollback 标签名 备份当前数据库状态 官网: docs.liquibase.com/commands/ho… 所有备份数据库的命令 snapshot - 仅仅只是用来看的并不能重新部署到数据库 官网: docs.liquibase.com/commands/sn… 注意: yml、json格式可用于到时比对源库用于生成diffChangelog文件的,建议–snapshot-format设置为这两种格式,而不是使用默认的 //查看snapshot的命令选项 liquibase snapshot --help //当前数据库结构状态 liquibase snapshot //控制台输出:三种格式输出:txt(默认)、json、yaml //yml、json格式可用于生成diffChangelog文件 liquibase snapshot --snapshot-format=json //输出到文件中 liquibase snapshot --snapshot-format=json --output-file=文件名.json 控制台输出 generate-changelog - 将当前的数据库状态以changelog文件输出到时可以部署到新数据库中 官网: docs.liquibase.com/commands/sn… //查看snapshot的命令选项 liquibase generate-changelog --help //当前数据库结构状态 liquibase generate-changelog --changelog-file=20220711snapshot.xml //部署到新数据库中 liquibase --changelog-file=20220711snapshot.xml update 数据库比对 官网: docs.liquibase.com/commands/ho… 库与库的比对 最简单的自行摸索 库与snapshot文件的比对 本地数据库结构Url编写: offline:数据库类型?snapshot=snapshot文件路径 //备份当前lrc_blog3的数据库状态以lrc_blog3_snapshot.yml文件形式保存 liquibase snapshot --output-file=lrc_blog3_snapshot.yml --snapshot-format=yml //比对源库lrc_blog与目标库lrc_blog3_snapshot.yml 数据库结构直接的区别,然后生成diffChangeLog.xml文件,到时直接将changlog-file设置成diffChangeLog.xml,然后update就可以将lrc_blog3的数据库结构变成跟lrc_blog一样 liquibase --url=offline:mysql?snapshot=lrc_blog3_snapshot.yml diffChangeLog --changelog-file=diffChangeLog.xml //将lrc_blog3的结构变成lrc_blog liquibase --changelog-file=diffChangeLog.xml update 部署、维护 update、update-sql(整个changelog文件直接部署)- 最常用 官网: docs.liquibase.com/commands/up… update-to-tag、update-to-tag-sql(changelog文件阶段性分部分(回滚点)的部署)- 建议常用这个取代update 官网: docs.liquibase.com/commands/up… 作用: 由于liquibase是按changeset节点在changelog的位置,按顺序的执行,这就导致可以在changeset之间设置一个标签(回滚点) () ,此命令只会部署当前节点以及当前标签节点之前的changeset节点,后面的直接忽略 //查看运行update-to-tag的SQL操作 liquibase update-to-tag-sql 标签名(回滚点) //根据标签进行部署changelog文件 liquibase update-to-tag 标签名(回滚点) changelog-sync 官网: docs.liquibase.com/commands/ma… 作用: 仅仅只是将changeLogFile里面的每条的changeset记录在DATABASECHANGELOG表中标记已经执行(但其实没执行任何有关changeLogFile里面的DDL语句) 使用场景: 某个项目中途引入了liquibase管理表结构SQL,一开始先使用generate-changelog生成当前数据库的表结构changelog文件,但是当你update的时候会直接报错,因为这些表都已经在当前数据库存在了,现在你只需要运行change-sync,默认当前changelog文件里面的SQL都是已经执行过的,在DATABASECHANGELOG表生成每个changeset执行记录,且EXECTYPE标记为已经执行EXECUTED,然后在udpate就不会报错了 clearCheckSums 官网: docs.liquibase.com/commands/ma… 官方定义: learn.liquibase.com/unit/view/i… 已升级 Liquibase 并希望使用最新版本重新计算校验和 开发中,您可能已经创建了多个更改,并希望通过操作changelog将这些更改组合成一个单一的变更集。您可能需要清除校验和才能完成此任务。 对存储的逻辑进行了更改,并使用与以前相同的文件,并希望使用新的存储逻辑来代替(这不是最佳实践,但可以这样做,因为存储的逻辑可以一遍又一遍地运行)。 想要克服错误,但不希望更改在下一次更新时运行。 开发人员修改了几个已经部署的脚本,现在 Liquibase update由于校验和错误而失败。 注意: 即使databasechangelog的记录标记已经执行,但只要update,liquibase都会去校验每条changset的MD5值,然后跟数据库存储的md5值进行不对,如果对不上则报错,没有则会填充进去数据库,然后下次update的时候在进行比对 mark-next-changeset-ran、mark-next-changeset-ran-sql 官网: docs.liquibase.com/commands/ma… 应用场景: 生产紧急情况,你手动上数据库进行更新数据库结构未经过liquibase运行,但你还是会在liquibase备份一份作为曾经执行过的DDL,但是该条changeset由于没有经liquibase执行,导致databasechangelog没有记录,则liquibase又会在执行一遍到时就报错了,所以避免这种由于紧急情况手动更改数据库但在liquibase有留changeset记录的,则使用markNextChangeSetRan命令让liquibase基于changelog生成一份已执行的databasechangelog记录,但不会将changset的SQL又重新作用于liquibase,相对于update,其实就是少执行了changset里面的SQL语句而已 //基于changlog生成一条未在databasechangelog存在的记录,并将其标记为已经执行 liquibase markNextChangeSetRan //查看运行markNextChangeSetRan的话将执行的SQL语句 liquibase markNextChangeSetRanSQL status:查看还有多少changeset是待部署状态 官网: docs.liquibase.com/commands/st… liquibase status --help //仅显示未部署的条数 liquibase status //建议使用这个:显示未部署条数以及哪些changeset没部署 liquibase status --verbose history:查看历史部署 官网: docs.liquibase.com/commands/st… liquibase history unexpected-changesets:排查出databasechangelog有部署日志但changlog文件没有changeset节点的databasechangelog记录(以整个databasechangelog表为准) 官网: docs.liquibase.com/commands/ma… //仅提示异常数量 liquibase unexpected-changesets //异常数量以及棘具体异常的标识也显示出来id、author liquibase unexpected-changesets --verbose 官网: docs.liquibase.com/change-type… 总结1: 涉及新增的结构、约束才支持回滚即生成回滚语句是:删除结构、约束,反过来则不支持自动回滚语句生成,需要自己自定义回滚语句节点 总结2: 如果不想语句有回滚语句,则在changeSet节点里面添加个空的节点 分类: 后端 标签: Java 安装掘金浏览器插件 多内容聚合浏览、多引擎快捷搜索、多工具便捷提效、多模式随心畅享,你想要的,这里都有! 前往安装 Java开发
liquibase tag 回滚点标签名
方式2:xml节点 - 个人更建议使用这个 官方: docs.liquibase.com/change-type… 注意: 每次都是创建一个新记录到DATABASECHANGELOG表中 changelog.xml <?xml version="1.1" encoding="UTF-8" standalone="no"?> <databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext" xmlns:pro="http://www.liquibase.org/xml/ns/pro" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog-ext http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-ext.xsd http://www.liquibase.org/xml/ns/pro http://www.liquibase.org/xml/ns/pro/liquibase-pro-4.12.xsd http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-latest.xsd"> <!--回滚点version_1.3--> <changeSet author="liquibase-docs" id="tagDatabase-example"> <tagDatabase tag="version_1.3"/> </changeSet> <changeSet author="root (generated)" id="1657564981926-1"> <createTable tableName="person_a8"> <column name="id" type="INT"> <constraints nullable="false" primaryKey="true"/> </column> <column name="name" type="VARCHAR(50)"> <constraints nullable="false"/> </column> <column name="address1" type="VARCHAR(50)"/> <column name="address2" type="VARCHAR(50)"/> <column name="city" type="VARCHAR(30)"/> </createTable> </changeSet> <changeSet author="root (generated)" id="1657564981926-2"> <createTable tableName="test"> <column name="id" type="INT"> <constraints nullable="false" primaryKey="true"/> </column> </createTable> </changeSet> </databaseChangeLog> //然后运行部署 liquibase update //设置当前的数据库状态为 标签名1 //其实质就是在DATABASECHANGELOG表的最新一条记录的tag列加上【标签名】 //如果没有DATABASECHANGELOG没有记录,也会补一条DESCRIPTION=empty的行记录作为标记 liquibase tag 标签名 //执行更新 liquibase update //将数据库的结构状态回滚到执行liquibase update更新之前的结构 liquibase rollback 标签名 备份当前数据库状态 官网: docs.liquibase.com/commands/ho… 所有备份数据库的命令 snapshot - 仅仅只是用来看的并不能重新部署到数据库 官网: docs.liquibase.com/commands/sn… 注意: yml、json格式可用于到时比对源库用于生成diffChangelog文件的,建议–snapshot-format设置为这两种格式,而不是使用默认的 //查看snapshot的命令选项 liquibase snapshot --help //当前数据库结构状态 liquibase snapshot //控制台输出:三种格式输出:txt(默认)、json、yaml //yml、json格式可用于生成diffChangelog文件 liquibase snapshot --snapshot-format=json //输出到文件中 liquibase snapshot --snapshot-format=json --output-file=文件名.json 控制台输出 generate-changelog - 将当前的数据库状态以changelog文件输出到时可以部署到新数据库中 官网: docs.liquibase.com/commands/sn… //查看snapshot的命令选项 liquibase generate-changelog --help //当前数据库结构状态 liquibase generate-changelog --changelog-file=20220711snapshot.xml //部署到新数据库中 liquibase --changelog-file=20220711snapshot.xml update 数据库比对 官网: docs.liquibase.com/commands/ho… 库与库的比对 最简单的自行摸索 库与snapshot文件的比对 本地数据库结构Url编写: offline:数据库类型?snapshot=snapshot文件路径 //备份当前lrc_blog3的数据库状态以lrc_blog3_snapshot.yml文件形式保存 liquibase snapshot --output-file=lrc_blog3_snapshot.yml --snapshot-format=yml //比对源库lrc_blog与目标库lrc_blog3_snapshot.yml 数据库结构直接的区别,然后生成diffChangeLog.xml文件,到时直接将changlog-file设置成diffChangeLog.xml,然后update就可以将lrc_blog3的数据库结构变成跟lrc_blog一样 liquibase --url=offline:mysql?snapshot=lrc_blog3_snapshot.yml diffChangeLog --changelog-file=diffChangeLog.xml //将lrc_blog3的结构变成lrc_blog liquibase --changelog-file=diffChangeLog.xml update 部署、维护 update、update-sql(整个changelog文件直接部署)- 最常用 官网: docs.liquibase.com/commands/up… update-to-tag、update-to-tag-sql(changelog文件阶段性分部分(回滚点)的部署)- 建议常用这个取代update 官网: docs.liquibase.com/commands/up… 作用: 由于liquibase是按changeset节点在changelog的位置,按顺序的执行,这就导致可以在changeset之间设置一个标签(回滚点) () ,此命令只会部署当前节点以及当前标签节点之前的changeset节点,后面的直接忽略 //查看运行update-to-tag的SQL操作 liquibase update-to-tag-sql 标签名(回滚点) //根据标签进行部署changelog文件 liquibase update-to-tag 标签名(回滚点) changelog-sync 官网: docs.liquibase.com/commands/ma… 作用: 仅仅只是将changeLogFile里面的每条的changeset记录在DATABASECHANGELOG表中标记已经执行(但其实没执行任何有关changeLogFile里面的DDL语句) 使用场景: 某个项目中途引入了liquibase管理表结构SQL,一开始先使用generate-changelog生成当前数据库的表结构changelog文件,但是当你update的时候会直接报错,因为这些表都已经在当前数据库存在了,现在你只需要运行change-sync,默认当前changelog文件里面的SQL都是已经执行过的,在DATABASECHANGELOG表生成每个changeset执行记录,且EXECTYPE标记为已经执行EXECUTED,然后在udpate就不会报错了 clearCheckSums 官网: docs.liquibase.com/commands/ma… 官方定义: learn.liquibase.com/unit/view/i… 已升级 Liquibase 并希望使用最新版本重新计算校验和 开发中,您可能已经创建了多个更改,并希望通过操作changelog将这些更改组合成一个单一的变更集。您可能需要清除校验和才能完成此任务。 对存储的逻辑进行了更改,并使用与以前相同的文件,并希望使用新的存储逻辑来代替(这不是最佳实践,但可以这样做,因为存储的逻辑可以一遍又一遍地运行)。 想要克服错误,但不希望更改在下一次更新时运行。 开发人员修改了几个已经部署的脚本,现在 Liquibase update由于校验和错误而失败。 注意: 即使databasechangelog的记录标记已经执行,但只要update,liquibase都会去校验每条changset的MD5值,然后跟数据库存储的md5值进行不对,如果对不上则报错,没有则会填充进去数据库,然后下次update的时候在进行比对 mark-next-changeset-ran、mark-next-changeset-ran-sql 官网: docs.liquibase.com/commands/ma… 应用场景: 生产紧急情况,你手动上数据库进行更新数据库结构未经过liquibase运行,但你还是会在liquibase备份一份作为曾经执行过的DDL,但是该条changeset由于没有经liquibase执行,导致databasechangelog没有记录,则liquibase又会在执行一遍到时就报错了,所以避免这种由于紧急情况手动更改数据库但在liquibase有留changeset记录的,则使用markNextChangeSetRan命令让liquibase基于changelog生成一份已执行的databasechangelog记录,但不会将changset的SQL又重新作用于liquibase,相对于update,其实就是少执行了changset里面的SQL语句而已 //基于changlog生成一条未在databasechangelog存在的记录,并将其标记为已经执行 liquibase markNextChangeSetRan //查看运行markNextChangeSetRan的话将执行的SQL语句 liquibase markNextChangeSetRanSQL status:查看还有多少changeset是待部署状态 官网: docs.liquibase.com/commands/st… liquibase status --help //仅显示未部署的条数 liquibase status //建议使用这个:显示未部署条数以及哪些changeset没部署 liquibase status --verbose history:查看历史部署 官网: docs.liquibase.com/commands/st… liquibase history unexpected-changesets:排查出databasechangelog有部署日志但changlog文件没有changeset节点的databasechangelog记录(以整个databasechangelog表为准) 官网: docs.liquibase.com/commands/ma… //仅提示异常数量 liquibase unexpected-changesets //异常数量以及棘具体异常的标识也显示出来id、author liquibase unexpected-changesets --verbose 官网: docs.liquibase.com/change-type… 总结1: 涉及新增的结构、约束才支持回滚即生成回滚语句是:删除结构、约束,反过来则不支持自动回滚语句生成,需要自己自定义回滚语句节点 总结2: 如果不想语句有回滚语句,则在changeSet节点里面添加个空的节点 分类: 后端 标签: Java 安装掘金浏览器插件 多内容聚合浏览、多引擎快捷搜索、多工具便捷提效、多模式随心畅享,你想要的,这里都有! 前往安装 Java开发
官方: docs.liquibase.com/change-type… 注意: 每次都是创建一个新记录到DATABASECHANGELOG表中
changelog.xml
<?xml version="1.1" encoding="UTF-8" standalone="no"?> <databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext" xmlns:pro="http://www.liquibase.org/xml/ns/pro" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog-ext http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-ext.xsd http://www.liquibase.org/xml/ns/pro http://www.liquibase.org/xml/ns/pro/liquibase-pro-4.12.xsd http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-latest.xsd"> <!--回滚点version_1.3--> <changeSet author="liquibase-docs" id="tagDatabase-example"> <tagDatabase tag="version_1.3"/> </changeSet> <changeSet author="root (generated)" id="1657564981926-1"> <createTable tableName="person_a8"> <column name="id" type="INT"> <constraints nullable="false" primaryKey="true"/> </column> <column name="name" type="VARCHAR(50)"> <constraints nullable="false"/> </column> <column name="address1" type="VARCHAR(50)"/> <column name="address2" type="VARCHAR(50)"/> <column name="city" type="VARCHAR(30)"/> </createTable> </changeSet> <changeSet author="root (generated)" id="1657564981926-2"> <createTable tableName="test"> <column name="id" type="INT"> <constraints nullable="false" primaryKey="true"/> </column> </createTable> </changeSet> </databaseChangeLog> //然后运行部署 liquibase update //设置当前的数据库状态为 标签名1 //其实质就是在DATABASECHANGELOG表的最新一条记录的tag列加上【标签名】 //如果没有DATABASECHANGELOG没有记录,也会补一条DESCRIPTION=empty的行记录作为标记 liquibase tag 标签名 //执行更新 liquibase update //将数据库的结构状态回滚到执行liquibase update更新之前的结构 liquibase rollback 标签名 备份当前数据库状态 官网: docs.liquibase.com/commands/ho… 所有备份数据库的命令 snapshot - 仅仅只是用来看的并不能重新部署到数据库 官网: docs.liquibase.com/commands/sn… 注意: yml、json格式可用于到时比对源库用于生成diffChangelog文件的,建议–snapshot-format设置为这两种格式,而不是使用默认的 //查看snapshot的命令选项 liquibase snapshot --help //当前数据库结构状态 liquibase snapshot //控制台输出:三种格式输出:txt(默认)、json、yaml //yml、json格式可用于生成diffChangelog文件 liquibase snapshot --snapshot-format=json //输出到文件中 liquibase snapshot --snapshot-format=json --output-file=文件名.json 控制台输出 generate-changelog - 将当前的数据库状态以changelog文件输出到时可以部署到新数据库中 官网: docs.liquibase.com/commands/sn… //查看snapshot的命令选项 liquibase generate-changelog --help //当前数据库结构状态 liquibase generate-changelog --changelog-file=20220711snapshot.xml //部署到新数据库中 liquibase --changelog-file=20220711snapshot.xml update 数据库比对 官网: docs.liquibase.com/commands/ho… 库与库的比对 最简单的自行摸索 库与snapshot文件的比对 本地数据库结构Url编写: offline:数据库类型?snapshot=snapshot文件路径 //备份当前lrc_blog3的数据库状态以lrc_blog3_snapshot.yml文件形式保存 liquibase snapshot --output-file=lrc_blog3_snapshot.yml --snapshot-format=yml //比对源库lrc_blog与目标库lrc_blog3_snapshot.yml 数据库结构直接的区别,然后生成diffChangeLog.xml文件,到时直接将changlog-file设置成diffChangeLog.xml,然后update就可以将lrc_blog3的数据库结构变成跟lrc_blog一样 liquibase --url=offline:mysql?snapshot=lrc_blog3_snapshot.yml diffChangeLog --changelog-file=diffChangeLog.xml //将lrc_blog3的结构变成lrc_blog liquibase --changelog-file=diffChangeLog.xml update 部署、维护 update、update-sql(整个changelog文件直接部署)- 最常用 官网: docs.liquibase.com/commands/up… update-to-tag、update-to-tag-sql(changelog文件阶段性分部分(回滚点)的部署)- 建议常用这个取代update 官网: docs.liquibase.com/commands/up… 作用: 由于liquibase是按changeset节点在changelog的位置,按顺序的执行,这就导致可以在changeset之间设置一个标签(回滚点) () ,此命令只会部署当前节点以及当前标签节点之前的changeset节点,后面的直接忽略 //查看运行update-to-tag的SQL操作 liquibase update-to-tag-sql 标签名(回滚点) //根据标签进行部署changelog文件 liquibase update-to-tag 标签名(回滚点) changelog-sync 官网: docs.liquibase.com/commands/ma… 作用: 仅仅只是将changeLogFile里面的每条的changeset记录在DATABASECHANGELOG表中标记已经执行(但其实没执行任何有关changeLogFile里面的DDL语句) 使用场景: 某个项目中途引入了liquibase管理表结构SQL,一开始先使用generate-changelog生成当前数据库的表结构changelog文件,但是当你update的时候会直接报错,因为这些表都已经在当前数据库存在了,现在你只需要运行change-sync,默认当前changelog文件里面的SQL都是已经执行过的,在DATABASECHANGELOG表生成每个changeset执行记录,且EXECTYPE标记为已经执行EXECUTED,然后在udpate就不会报错了 clearCheckSums 官网: docs.liquibase.com/commands/ma… 官方定义: learn.liquibase.com/unit/view/i… 已升级 Liquibase 并希望使用最新版本重新计算校验和 开发中,您可能已经创建了多个更改,并希望通过操作changelog将这些更改组合成一个单一的变更集。您可能需要清除校验和才能完成此任务。 对存储的逻辑进行了更改,并使用与以前相同的文件,并希望使用新的存储逻辑来代替(这不是最佳实践,但可以这样做,因为存储的逻辑可以一遍又一遍地运行)。 想要克服错误,但不希望更改在下一次更新时运行。 开发人员修改了几个已经部署的脚本,现在 Liquibase update由于校验和错误而失败。 注意: 即使databasechangelog的记录标记已经执行,但只要update,liquibase都会去校验每条changset的MD5值,然后跟数据库存储的md5值进行不对,如果对不上则报错,没有则会填充进去数据库,然后下次update的时候在进行比对 mark-next-changeset-ran、mark-next-changeset-ran-sql 官网: docs.liquibase.com/commands/ma… 应用场景: 生产紧急情况,你手动上数据库进行更新数据库结构未经过liquibase运行,但你还是会在liquibase备份一份作为曾经执行过的DDL,但是该条changeset由于没有经liquibase执行,导致databasechangelog没有记录,则liquibase又会在执行一遍到时就报错了,所以避免这种由于紧急情况手动更改数据库但在liquibase有留changeset记录的,则使用markNextChangeSetRan命令让liquibase基于changelog生成一份已执行的databasechangelog记录,但不会将changset的SQL又重新作用于liquibase,相对于update,其实就是少执行了changset里面的SQL语句而已 //基于changlog生成一条未在databasechangelog存在的记录,并将其标记为已经执行 liquibase markNextChangeSetRan //查看运行markNextChangeSetRan的话将执行的SQL语句 liquibase markNextChangeSetRanSQL status:查看还有多少changeset是待部署状态 官网: docs.liquibase.com/commands/st… liquibase status --help //仅显示未部署的条数 liquibase status //建议使用这个:显示未部署条数以及哪些changeset没部署 liquibase status --verbose history:查看历史部署 官网: docs.liquibase.com/commands/st… liquibase history unexpected-changesets:排查出databasechangelog有部署日志但changlog文件没有changeset节点的databasechangelog记录(以整个databasechangelog表为准) 官网: docs.liquibase.com/commands/ma… //仅提示异常数量 liquibase unexpected-changesets //异常数量以及棘具体异常的标识也显示出来id、author liquibase unexpected-changesets --verbose 官网: docs.liquibase.com/change-type… 总结1: 涉及新增的结构、约束才支持回滚即生成回滚语句是:删除结构、约束,反过来则不支持自动回滚语句生成,需要自己自定义回滚语句节点 总结2: 如果不想语句有回滚语句,则在changeSet节点里面添加个空的节点 分类: 后端 标签: Java 安装掘金浏览器插件 多内容聚合浏览、多引擎快捷搜索、多工具便捷提效、多模式随心畅享,你想要的,这里都有! 前往安装 Java开发
//然后运行部署 liquibase update //设置当前的数据库状态为 标签名1 //其实质就是在DATABASECHANGELOG表的最新一条记录的tag列加上【标签名】 //如果没有DATABASECHANGELOG没有记录,也会补一条DESCRIPTION=empty的行记录作为标记 liquibase tag 标签名 //执行更新 liquibase update //将数据库的结构状态回滚到执行liquibase update更新之前的结构 liquibase rollback 标签名 备份当前数据库状态 官网: docs.liquibase.com/commands/ho… 所有备份数据库的命令 snapshot - 仅仅只是用来看的并不能重新部署到数据库 官网: docs.liquibase.com/commands/sn… 注意: yml、json格式可用于到时比对源库用于生成diffChangelog文件的,建议–snapshot-format设置为这两种格式,而不是使用默认的 //查看snapshot的命令选项 liquibase snapshot --help //当前数据库结构状态 liquibase snapshot //控制台输出:三种格式输出:txt(默认)、json、yaml //yml、json格式可用于生成diffChangelog文件 liquibase snapshot --snapshot-format=json //输出到文件中 liquibase snapshot --snapshot-format=json --output-file=文件名.json 控制台输出 generate-changelog - 将当前的数据库状态以changelog文件输出到时可以部署到新数据库中 官网: docs.liquibase.com/commands/sn… //查看snapshot的命令选项 liquibase generate-changelog --help //当前数据库结构状态 liquibase generate-changelog --changelog-file=20220711snapshot.xml //部署到新数据库中 liquibase --changelog-file=20220711snapshot.xml update 数据库比对 官网: docs.liquibase.com/commands/ho… 库与库的比对 最简单的自行摸索 库与snapshot文件的比对 本地数据库结构Url编写: offline:数据库类型?snapshot=snapshot文件路径 //备份当前lrc_blog3的数据库状态以lrc_blog3_snapshot.yml文件形式保存 liquibase snapshot --output-file=lrc_blog3_snapshot.yml --snapshot-format=yml //比对源库lrc_blog与目标库lrc_blog3_snapshot.yml 数据库结构直接的区别,然后生成diffChangeLog.xml文件,到时直接将changlog-file设置成diffChangeLog.xml,然后update就可以将lrc_blog3的数据库结构变成跟lrc_blog一样 liquibase --url=offline:mysql?snapshot=lrc_blog3_snapshot.yml diffChangeLog --changelog-file=diffChangeLog.xml //将lrc_blog3的结构变成lrc_blog liquibase --changelog-file=diffChangeLog.xml update 部署、维护 update、update-sql(整个changelog文件直接部署)- 最常用 官网: docs.liquibase.com/commands/up… update-to-tag、update-to-tag-sql(changelog文件阶段性分部分(回滚点)的部署)- 建议常用这个取代update 官网: docs.liquibase.com/commands/up… 作用: 由于liquibase是按changeset节点在changelog的位置,按顺序的执行,这就导致可以在changeset之间设置一个标签(回滚点) () ,此命令只会部署当前节点以及当前标签节点之前的changeset节点,后面的直接忽略 //查看运行update-to-tag的SQL操作 liquibase update-to-tag-sql 标签名(回滚点) //根据标签进行部署changelog文件 liquibase update-to-tag 标签名(回滚点) changelog-sync 官网: docs.liquibase.com/commands/ma… 作用: 仅仅只是将changeLogFile里面的每条的changeset记录在DATABASECHANGELOG表中标记已经执行(但其实没执行任何有关changeLogFile里面的DDL语句) 使用场景: 某个项目中途引入了liquibase管理表结构SQL,一开始先使用generate-changelog生成当前数据库的表结构changelog文件,但是当你update的时候会直接报错,因为这些表都已经在当前数据库存在了,现在你只需要运行change-sync,默认当前changelog文件里面的SQL都是已经执行过的,在DATABASECHANGELOG表生成每个changeset执行记录,且EXECTYPE标记为已经执行EXECUTED,然后在udpate就不会报错了 clearCheckSums 官网: docs.liquibase.com/commands/ma… 官方定义: learn.liquibase.com/unit/view/i… 已升级 Liquibase 并希望使用最新版本重新计算校验和 开发中,您可能已经创建了多个更改,并希望通过操作changelog将这些更改组合成一个单一的变更集。您可能需要清除校验和才能完成此任务。 对存储的逻辑进行了更改,并使用与以前相同的文件,并希望使用新的存储逻辑来代替(这不是最佳实践,但可以这样做,因为存储的逻辑可以一遍又一遍地运行)。 想要克服错误,但不希望更改在下一次更新时运行。 开发人员修改了几个已经部署的脚本,现在 Liquibase update由于校验和错误而失败。 注意: 即使databasechangelog的记录标记已经执行,但只要update,liquibase都会去校验每条changset的MD5值,然后跟数据库存储的md5值进行不对,如果对不上则报错,没有则会填充进去数据库,然后下次update的时候在进行比对 mark-next-changeset-ran、mark-next-changeset-ran-sql 官网: docs.liquibase.com/commands/ma… 应用场景: 生产紧急情况,你手动上数据库进行更新数据库结构未经过liquibase运行,但你还是会在liquibase备份一份作为曾经执行过的DDL,但是该条changeset由于没有经liquibase执行,导致databasechangelog没有记录,则liquibase又会在执行一遍到时就报错了,所以避免这种由于紧急情况手动更改数据库但在liquibase有留changeset记录的,则使用markNextChangeSetRan命令让liquibase基于changelog生成一份已执行的databasechangelog记录,但不会将changset的SQL又重新作用于liquibase,相对于update,其实就是少执行了changset里面的SQL语句而已 //基于changlog生成一条未在databasechangelog存在的记录,并将其标记为已经执行 liquibase markNextChangeSetRan //查看运行markNextChangeSetRan的话将执行的SQL语句 liquibase markNextChangeSetRanSQL status:查看还有多少changeset是待部署状态 官网: docs.liquibase.com/commands/st… liquibase status --help //仅显示未部署的条数 liquibase status //建议使用这个:显示未部署条数以及哪些changeset没部署 liquibase status --verbose history:查看历史部署 官网: docs.liquibase.com/commands/st… liquibase history unexpected-changesets:排查出databasechangelog有部署日志但changlog文件没有changeset节点的databasechangelog记录(以整个databasechangelog表为准) 官网: docs.liquibase.com/commands/ma… //仅提示异常数量 liquibase unexpected-changesets //异常数量以及棘具体异常的标识也显示出来id、author liquibase unexpected-changesets --verbose 官网: docs.liquibase.com/change-type… 总结1: 涉及新增的结构、约束才支持回滚即生成回滚语句是:删除结构、约束,反过来则不支持自动回滚语句生成,需要自己自定义回滚语句节点 总结2: 如果不想语句有回滚语句,则在changeSet节点里面添加个空的节点 分类: 后端 标签: Java 安装掘金浏览器插件 多内容聚合浏览、多引擎快捷搜索、多工具便捷提效、多模式随心畅享,你想要的,这里都有! 前往安装 Java开发
//设置当前的数据库状态为 标签名1 //其实质就是在DATABASECHANGELOG表的最新一条记录的tag列加上【标签名】 //如果没有DATABASECHANGELOG没有记录,也会补一条DESCRIPTION=empty的行记录作为标记 liquibase tag 标签名 //执行更新 liquibase update //将数据库的结构状态回滚到执行liquibase update更新之前的结构 liquibase rollback 标签名 备份当前数据库状态 官网: docs.liquibase.com/commands/ho… 所有备份数据库的命令 snapshot - 仅仅只是用来看的并不能重新部署到数据库 官网: docs.liquibase.com/commands/sn… 注意: yml、json格式可用于到时比对源库用于生成diffChangelog文件的,建议–snapshot-format设置为这两种格式,而不是使用默认的 //查看snapshot的命令选项 liquibase snapshot --help //当前数据库结构状态 liquibase snapshot //控制台输出:三种格式输出:txt(默认)、json、yaml //yml、json格式可用于生成diffChangelog文件 liquibase snapshot --snapshot-format=json //输出到文件中 liquibase snapshot --snapshot-format=json --output-file=文件名.json 控制台输出 generate-changelog - 将当前的数据库状态以changelog文件输出到时可以部署到新数据库中 官网: docs.liquibase.com/commands/sn… //查看snapshot的命令选项 liquibase generate-changelog --help //当前数据库结构状态 liquibase generate-changelog --changelog-file=20220711snapshot.xml //部署到新数据库中 liquibase --changelog-file=20220711snapshot.xml update 数据库比对 官网: docs.liquibase.com/commands/ho… 库与库的比对 最简单的自行摸索 库与snapshot文件的比对 本地数据库结构Url编写: offline:数据库类型?snapshot=snapshot文件路径 //备份当前lrc_blog3的数据库状态以lrc_blog3_snapshot.yml文件形式保存 liquibase snapshot --output-file=lrc_blog3_snapshot.yml --snapshot-format=yml //比对源库lrc_blog与目标库lrc_blog3_snapshot.yml 数据库结构直接的区别,然后生成diffChangeLog.xml文件,到时直接将changlog-file设置成diffChangeLog.xml,然后update就可以将lrc_blog3的数据库结构变成跟lrc_blog一样 liquibase --url=offline:mysql?snapshot=lrc_blog3_snapshot.yml diffChangeLog --changelog-file=diffChangeLog.xml //将lrc_blog3的结构变成lrc_blog liquibase --changelog-file=diffChangeLog.xml update 部署、维护 update、update-sql(整个changelog文件直接部署)- 最常用 官网: docs.liquibase.com/commands/up… update-to-tag、update-to-tag-sql(changelog文件阶段性分部分(回滚点)的部署)- 建议常用这个取代update 官网: docs.liquibase.com/commands/up… 作用: 由于liquibase是按changeset节点在changelog的位置,按顺序的执行,这就导致可以在changeset之间设置一个标签(回滚点) () ,此命令只会部署当前节点以及当前标签节点之前的changeset节点,后面的直接忽略 //查看运行update-to-tag的SQL操作 liquibase update-to-tag-sql 标签名(回滚点) //根据标签进行部署changelog文件 liquibase update-to-tag 标签名(回滚点) changelog-sync 官网: docs.liquibase.com/commands/ma… 作用: 仅仅只是将changeLogFile里面的每条的changeset记录在DATABASECHANGELOG表中标记已经执行(但其实没执行任何有关changeLogFile里面的DDL语句) 使用场景: 某个项目中途引入了liquibase管理表结构SQL,一开始先使用generate-changelog生成当前数据库的表结构changelog文件,但是当你update的时候会直接报错,因为这些表都已经在当前数据库存在了,现在你只需要运行change-sync,默认当前changelog文件里面的SQL都是已经执行过的,在DATABASECHANGELOG表生成每个changeset执行记录,且EXECTYPE标记为已经执行EXECUTED,然后在udpate就不会报错了 clearCheckSums 官网: docs.liquibase.com/commands/ma… 官方定义: learn.liquibase.com/unit/view/i… 已升级 Liquibase 并希望使用最新版本重新计算校验和 开发中,您可能已经创建了多个更改,并希望通过操作changelog将这些更改组合成一个单一的变更集。您可能需要清除校验和才能完成此任务。 对存储的逻辑进行了更改,并使用与以前相同的文件,并希望使用新的存储逻辑来代替(这不是最佳实践,但可以这样做,因为存储的逻辑可以一遍又一遍地运行)。 想要克服错误,但不希望更改在下一次更新时运行。 开发人员修改了几个已经部署的脚本,现在 Liquibase update由于校验和错误而失败。 注意: 即使databasechangelog的记录标记已经执行,但只要update,liquibase都会去校验每条changset的MD5值,然后跟数据库存储的md5值进行不对,如果对不上则报错,没有则会填充进去数据库,然后下次update的时候在进行比对 mark-next-changeset-ran、mark-next-changeset-ran-sql 官网: docs.liquibase.com/commands/ma… 应用场景: 生产紧急情况,你手动上数据库进行更新数据库结构未经过liquibase运行,但你还是会在liquibase备份一份作为曾经执行过的DDL,但是该条changeset由于没有经liquibase执行,导致databasechangelog没有记录,则liquibase又会在执行一遍到时就报错了,所以避免这种由于紧急情况手动更改数据库但在liquibase有留changeset记录的,则使用markNextChangeSetRan命令让liquibase基于changelog生成一份已执行的databasechangelog记录,但不会将changset的SQL又重新作用于liquibase,相对于update,其实就是少执行了changset里面的SQL语句而已 //基于changlog生成一条未在databasechangelog存在的记录,并将其标记为已经执行 liquibase markNextChangeSetRan //查看运行markNextChangeSetRan的话将执行的SQL语句 liquibase markNextChangeSetRanSQL status:查看还有多少changeset是待部署状态 官网: docs.liquibase.com/commands/st… liquibase status --help //仅显示未部署的条数 liquibase status //建议使用这个:显示未部署条数以及哪些changeset没部署 liquibase status --verbose history:查看历史部署 官网: docs.liquibase.com/commands/st… liquibase history unexpected-changesets:排查出databasechangelog有部署日志但changlog文件没有changeset节点的databasechangelog记录(以整个databasechangelog表为准) 官网: docs.liquibase.com/commands/ma… //仅提示异常数量 liquibase unexpected-changesets //异常数量以及棘具体异常的标识也显示出来id、author liquibase unexpected-changesets --verbose 官网: docs.liquibase.com/change-type… 总结1: 涉及新增的结构、约束才支持回滚即生成回滚语句是:删除结构、约束,反过来则不支持自动回滚语句生成,需要自己自定义回滚语句节点 总结2: 如果不想语句有回滚语句,则在changeSet节点里面添加个空的节点 分类: 后端 标签: Java 安装掘金浏览器插件 多内容聚合浏览、多引擎快捷搜索、多工具便捷提效、多模式随心畅享,你想要的,这里都有! 前往安装 Java开发
官网: docs.liquibase.com/commands/sn…
注意: yml、json格式可用于到时比对源库用于生成diffChangelog文件的,建议–snapshot-format设置为这两种格式,而不是使用默认的
//查看snapshot的命令选项 liquibase snapshot --help //当前数据库结构状态 liquibase snapshot //控制台输出:三种格式输出:txt(默认)、json、yaml //yml、json格式可用于生成diffChangelog文件 liquibase snapshot --snapshot-format=json //输出到文件中 liquibase snapshot --snapshot-format=json --output-file=文件名.json 控制台输出 generate-changelog - 将当前的数据库状态以changelog文件输出到时可以部署到新数据库中 官网: docs.liquibase.com/commands/sn… //查看snapshot的命令选项 liquibase generate-changelog --help //当前数据库结构状态 liquibase generate-changelog --changelog-file=20220711snapshot.xml //部署到新数据库中 liquibase --changelog-file=20220711snapshot.xml update 数据库比对 官网: docs.liquibase.com/commands/ho… 库与库的比对 最简单的自行摸索 库与snapshot文件的比对 本地数据库结构Url编写: offline:数据库类型?snapshot=snapshot文件路径 //备份当前lrc_blog3的数据库状态以lrc_blog3_snapshot.yml文件形式保存 liquibase snapshot --output-file=lrc_blog3_snapshot.yml --snapshot-format=yml //比对源库lrc_blog与目标库lrc_blog3_snapshot.yml 数据库结构直接的区别,然后生成diffChangeLog.xml文件,到时直接将changlog-file设置成diffChangeLog.xml,然后update就可以将lrc_blog3的数据库结构变成跟lrc_blog一样 liquibase --url=offline:mysql?snapshot=lrc_blog3_snapshot.yml diffChangeLog --changelog-file=diffChangeLog.xml //将lrc_blog3的结构变成lrc_blog liquibase --changelog-file=diffChangeLog.xml update 部署、维护 update、update-sql(整个changelog文件直接部署)- 最常用 官网: docs.liquibase.com/commands/up… update-to-tag、update-to-tag-sql(changelog文件阶段性分部分(回滚点)的部署)- 建议常用这个取代update 官网: docs.liquibase.com/commands/up… 作用: 由于liquibase是按changeset节点在changelog的位置,按顺序的执行,这就导致可以在changeset之间设置一个标签(回滚点) () ,此命令只会部署当前节点以及当前标签节点之前的changeset节点,后面的直接忽略 //查看运行update-to-tag的SQL操作 liquibase update-to-tag-sql 标签名(回滚点) //根据标签进行部署changelog文件 liquibase update-to-tag 标签名(回滚点) changelog-sync 官网: docs.liquibase.com/commands/ma… 作用: 仅仅只是将changeLogFile里面的每条的changeset记录在DATABASECHANGELOG表中标记已经执行(但其实没执行任何有关changeLogFile里面的DDL语句) 使用场景: 某个项目中途引入了liquibase管理表结构SQL,一开始先使用generate-changelog生成当前数据库的表结构changelog文件,但是当你update的时候会直接报错,因为这些表都已经在当前数据库存在了,现在你只需要运行change-sync,默认当前changelog文件里面的SQL都是已经执行过的,在DATABASECHANGELOG表生成每个changeset执行记录,且EXECTYPE标记为已经执行EXECUTED,然后在udpate就不会报错了 clearCheckSums 官网: docs.liquibase.com/commands/ma… 官方定义: learn.liquibase.com/unit/view/i… 已升级 Liquibase 并希望使用最新版本重新计算校验和 开发中,您可能已经创建了多个更改,并希望通过操作changelog将这些更改组合成一个单一的变更集。您可能需要清除校验和才能完成此任务。 对存储的逻辑进行了更改,并使用与以前相同的文件,并希望使用新的存储逻辑来代替(这不是最佳实践,但可以这样做,因为存储的逻辑可以一遍又一遍地运行)。 想要克服错误,但不希望更改在下一次更新时运行。 开发人员修改了几个已经部署的脚本,现在 Liquibase update由于校验和错误而失败。 注意: 即使databasechangelog的记录标记已经执行,但只要update,liquibase都会去校验每条changset的MD5值,然后跟数据库存储的md5值进行不对,如果对不上则报错,没有则会填充进去数据库,然后下次update的时候在进行比对 mark-next-changeset-ran、mark-next-changeset-ran-sql 官网: docs.liquibase.com/commands/ma… 应用场景: 生产紧急情况,你手动上数据库进行更新数据库结构未经过liquibase运行,但你还是会在liquibase备份一份作为曾经执行过的DDL,但是该条changeset由于没有经liquibase执行,导致databasechangelog没有记录,则liquibase又会在执行一遍到时就报错了,所以避免这种由于紧急情况手动更改数据库但在liquibase有留changeset记录的,则使用markNextChangeSetRan命令让liquibase基于changelog生成一份已执行的databasechangelog记录,但不会将changset的SQL又重新作用于liquibase,相对于update,其实就是少执行了changset里面的SQL语句而已 //基于changlog生成一条未在databasechangelog存在的记录,并将其标记为已经执行 liquibase markNextChangeSetRan //查看运行markNextChangeSetRan的话将执行的SQL语句 liquibase markNextChangeSetRanSQL status:查看还有多少changeset是待部署状态 官网: docs.liquibase.com/commands/st… liquibase status --help //仅显示未部署的条数 liquibase status //建议使用这个:显示未部署条数以及哪些changeset没部署 liquibase status --verbose history:查看历史部署 官网: docs.liquibase.com/commands/st… liquibase history unexpected-changesets:排查出databasechangelog有部署日志但changlog文件没有changeset节点的databasechangelog记录(以整个databasechangelog表为准) 官网: docs.liquibase.com/commands/ma… //仅提示异常数量 liquibase unexpected-changesets //异常数量以及棘具体异常的标识也显示出来id、author liquibase unexpected-changesets --verbose 官网: docs.liquibase.com/change-type… 总结1: 涉及新增的结构、约束才支持回滚即生成回滚语句是:删除结构、约束,反过来则不支持自动回滚语句生成,需要自己自定义回滚语句节点 总结2: 如果不想语句有回滚语句,则在changeSet节点里面添加个空的节点 分类: 后端 标签: Java 安装掘金浏览器插件 多内容聚合浏览、多引擎快捷搜索、多工具便捷提效、多模式随心畅享,你想要的,这里都有! 前往安装 Java开发
控制台输出
//查看snapshot的命令选项 liquibase generate-changelog --help //当前数据库结构状态 liquibase generate-changelog --changelog-file=20220711snapshot.xml //部署到新数据库中 liquibase --changelog-file=20220711snapshot.xml update 数据库比对 官网: docs.liquibase.com/commands/ho… 库与库的比对 最简单的自行摸索 库与snapshot文件的比对 本地数据库结构Url编写: offline:数据库类型?snapshot=snapshot文件路径 //备份当前lrc_blog3的数据库状态以lrc_blog3_snapshot.yml文件形式保存 liquibase snapshot --output-file=lrc_blog3_snapshot.yml --snapshot-format=yml //比对源库lrc_blog与目标库lrc_blog3_snapshot.yml 数据库结构直接的区别,然后生成diffChangeLog.xml文件,到时直接将changlog-file设置成diffChangeLog.xml,然后update就可以将lrc_blog3的数据库结构变成跟lrc_blog一样 liquibase --url=offline:mysql?snapshot=lrc_blog3_snapshot.yml diffChangeLog --changelog-file=diffChangeLog.xml //将lrc_blog3的结构变成lrc_blog liquibase --changelog-file=diffChangeLog.xml update 部署、维护 update、update-sql(整个changelog文件直接部署)- 最常用 官网: docs.liquibase.com/commands/up… update-to-tag、update-to-tag-sql(changelog文件阶段性分部分(回滚点)的部署)- 建议常用这个取代update 官网: docs.liquibase.com/commands/up… 作用: 由于liquibase是按changeset节点在changelog的位置,按顺序的执行,这就导致可以在changeset之间设置一个标签(回滚点) () ,此命令只会部署当前节点以及当前标签节点之前的changeset节点,后面的直接忽略 //查看运行update-to-tag的SQL操作 liquibase update-to-tag-sql 标签名(回滚点) //根据标签进行部署changelog文件 liquibase update-to-tag 标签名(回滚点) changelog-sync 官网: docs.liquibase.com/commands/ma… 作用: 仅仅只是将changeLogFile里面的每条的changeset记录在DATABASECHANGELOG表中标记已经执行(但其实没执行任何有关changeLogFile里面的DDL语句) 使用场景: 某个项目中途引入了liquibase管理表结构SQL,一开始先使用generate-changelog生成当前数据库的表结构changelog文件,但是当你update的时候会直接报错,因为这些表都已经在当前数据库存在了,现在你只需要运行change-sync,默认当前changelog文件里面的SQL都是已经执行过的,在DATABASECHANGELOG表生成每个changeset执行记录,且EXECTYPE标记为已经执行EXECUTED,然后在udpate就不会报错了 clearCheckSums 官网: docs.liquibase.com/commands/ma… 官方定义: learn.liquibase.com/unit/view/i… 已升级 Liquibase 并希望使用最新版本重新计算校验和 开发中,您可能已经创建了多个更改,并希望通过操作changelog将这些更改组合成一个单一的变更集。您可能需要清除校验和才能完成此任务。 对存储的逻辑进行了更改,并使用与以前相同的文件,并希望使用新的存储逻辑来代替(这不是最佳实践,但可以这样做,因为存储的逻辑可以一遍又一遍地运行)。 想要克服错误,但不希望更改在下一次更新时运行。 开发人员修改了几个已经部署的脚本,现在 Liquibase update由于校验和错误而失败。 注意: 即使databasechangelog的记录标记已经执行,但只要update,liquibase都会去校验每条changset的MD5值,然后跟数据库存储的md5值进行不对,如果对不上则报错,没有则会填充进去数据库,然后下次update的时候在进行比对 mark-next-changeset-ran、mark-next-changeset-ran-sql 官网: docs.liquibase.com/commands/ma… 应用场景: 生产紧急情况,你手动上数据库进行更新数据库结构未经过liquibase运行,但你还是会在liquibase备份一份作为曾经执行过的DDL,但是该条changeset由于没有经liquibase执行,导致databasechangelog没有记录,则liquibase又会在执行一遍到时就报错了,所以避免这种由于紧急情况手动更改数据库但在liquibase有留changeset记录的,则使用markNextChangeSetRan命令让liquibase基于changelog生成一份已执行的databasechangelog记录,但不会将changset的SQL又重新作用于liquibase,相对于update,其实就是少执行了changset里面的SQL语句而已 //基于changlog生成一条未在databasechangelog存在的记录,并将其标记为已经执行 liquibase markNextChangeSetRan //查看运行markNextChangeSetRan的话将执行的SQL语句 liquibase markNextChangeSetRanSQL status:查看还有多少changeset是待部署状态 官网: docs.liquibase.com/commands/st… liquibase status --help //仅显示未部署的条数 liquibase status //建议使用这个:显示未部署条数以及哪些changeset没部署 liquibase status --verbose history:查看历史部署 官网: docs.liquibase.com/commands/st… liquibase history unexpected-changesets:排查出databasechangelog有部署日志但changlog文件没有changeset节点的databasechangelog记录(以整个databasechangelog表为准) 官网: docs.liquibase.com/commands/ma… //仅提示异常数量 liquibase unexpected-changesets //异常数量以及棘具体异常的标识也显示出来id、author liquibase unexpected-changesets --verbose 官网: docs.liquibase.com/change-type… 总结1: 涉及新增的结构、约束才支持回滚即生成回滚语句是:删除结构、约束,反过来则不支持自动回滚语句生成,需要自己自定义回滚语句节点 总结2: 如果不想语句有回滚语句,则在changeSet节点里面添加个空的节点 分类: 后端 标签: Java 安装掘金浏览器插件 多内容聚合浏览、多引擎快捷搜索、多工具便捷提效、多模式随心畅享,你想要的,这里都有! 前往安装 Java开发
最简单的自行摸索
本地数据库结构Url编写: offline:数据库类型?snapshot=snapshot文件路径
//备份当前lrc_blog3的数据库状态以lrc_blog3_snapshot.yml文件形式保存 liquibase snapshot --output-file=lrc_blog3_snapshot.yml --snapshot-format=yml //比对源库lrc_blog与目标库lrc_blog3_snapshot.yml 数据库结构直接的区别,然后生成diffChangeLog.xml文件,到时直接将changlog-file设置成diffChangeLog.xml,然后update就可以将lrc_blog3的数据库结构变成跟lrc_blog一样 liquibase --url=offline:mysql?snapshot=lrc_blog3_snapshot.yml diffChangeLog --changelog-file=diffChangeLog.xml //将lrc_blog3的结构变成lrc_blog liquibase --changelog-file=diffChangeLog.xml update 部署、维护 update、update-sql(整个changelog文件直接部署)- 最常用 官网: docs.liquibase.com/commands/up… update-to-tag、update-to-tag-sql(changelog文件阶段性分部分(回滚点)的部署)- 建议常用这个取代update 官网: docs.liquibase.com/commands/up… 作用: 由于liquibase是按changeset节点在changelog的位置,按顺序的执行,这就导致可以在changeset之间设置一个标签(回滚点) () ,此命令只会部署当前节点以及当前标签节点之前的changeset节点,后面的直接忽略 //查看运行update-to-tag的SQL操作 liquibase update-to-tag-sql 标签名(回滚点) //根据标签进行部署changelog文件 liquibase update-to-tag 标签名(回滚点) changelog-sync 官网: docs.liquibase.com/commands/ma… 作用: 仅仅只是将changeLogFile里面的每条的changeset记录在DATABASECHANGELOG表中标记已经执行(但其实没执行任何有关changeLogFile里面的DDL语句) 使用场景: 某个项目中途引入了liquibase管理表结构SQL,一开始先使用generate-changelog生成当前数据库的表结构changelog文件,但是当你update的时候会直接报错,因为这些表都已经在当前数据库存在了,现在你只需要运行change-sync,默认当前changelog文件里面的SQL都是已经执行过的,在DATABASECHANGELOG表生成每个changeset执行记录,且EXECTYPE标记为已经执行EXECUTED,然后在udpate就不会报错了 clearCheckSums 官网: docs.liquibase.com/commands/ma… 官方定义: learn.liquibase.com/unit/view/i… 已升级 Liquibase 并希望使用最新版本重新计算校验和 开发中,您可能已经创建了多个更改,并希望通过操作changelog将这些更改组合成一个单一的变更集。您可能需要清除校验和才能完成此任务。 对存储的逻辑进行了更改,并使用与以前相同的文件,并希望使用新的存储逻辑来代替(这不是最佳实践,但可以这样做,因为存储的逻辑可以一遍又一遍地运行)。 想要克服错误,但不希望更改在下一次更新时运行。 开发人员修改了几个已经部署的脚本,现在 Liquibase update由于校验和错误而失败。 注意: 即使databasechangelog的记录标记已经执行,但只要update,liquibase都会去校验每条changset的MD5值,然后跟数据库存储的md5值进行不对,如果对不上则报错,没有则会填充进去数据库,然后下次update的时候在进行比对 mark-next-changeset-ran、mark-next-changeset-ran-sql 官网: docs.liquibase.com/commands/ma… 应用场景: 生产紧急情况,你手动上数据库进行更新数据库结构未经过liquibase运行,但你还是会在liquibase备份一份作为曾经执行过的DDL,但是该条changeset由于没有经liquibase执行,导致databasechangelog没有记录,则liquibase又会在执行一遍到时就报错了,所以避免这种由于紧急情况手动更改数据库但在liquibase有留changeset记录的,则使用markNextChangeSetRan命令让liquibase基于changelog生成一份已执行的databasechangelog记录,但不会将changset的SQL又重新作用于liquibase,相对于update,其实就是少执行了changset里面的SQL语句而已 //基于changlog生成一条未在databasechangelog存在的记录,并将其标记为已经执行 liquibase markNextChangeSetRan //查看运行markNextChangeSetRan的话将执行的SQL语句 liquibase markNextChangeSetRanSQL status:查看还有多少changeset是待部署状态 官网: docs.liquibase.com/commands/st… liquibase status --help //仅显示未部署的条数 liquibase status //建议使用这个:显示未部署条数以及哪些changeset没部署 liquibase status --verbose history:查看历史部署 官网: docs.liquibase.com/commands/st… liquibase history unexpected-changesets:排查出databasechangelog有部署日志但changlog文件没有changeset节点的databasechangelog记录(以整个databasechangelog表为准) 官网: docs.liquibase.com/commands/ma… //仅提示异常数量 liquibase unexpected-changesets //异常数量以及棘具体异常的标识也显示出来id、author liquibase unexpected-changesets --verbose 官网: docs.liquibase.com/change-type… 总结1: 涉及新增的结构、约束才支持回滚即生成回滚语句是:删除结构、约束,反过来则不支持自动回滚语句生成,需要自己自定义回滚语句节点 总结2: 如果不想语句有回滚语句,则在changeSet节点里面添加个空的节点 分类: 后端 标签: Java 安装掘金浏览器插件 多内容聚合浏览、多引擎快捷搜索、多工具便捷提效、多模式随心畅享,你想要的,这里都有! 前往安装 Java开发
//备份当前lrc_blog3的数据库状态以lrc_blog3_snapshot.yml文件形式保存 liquibase snapshot --output-file=lrc_blog3_snapshot.yml --snapshot-format=yml //比对源库lrc_blog与目标库lrc_blog3_snapshot.yml 数据库结构直接的区别,然后生成diffChangeLog.xml文件,到时直接将changlog-file设置成diffChangeLog.xml,然后update就可以将lrc_blog3的数据库结构变成跟lrc_blog一样 liquibase --url=offline:mysql?snapshot=lrc_blog3_snapshot.yml diffChangeLog --changelog-file=diffChangeLog.xml //将lrc_blog3的结构变成lrc_blog liquibase --changelog-file=diffChangeLog.xml update
部署、维护 update、update-sql(整个changelog文件直接部署)- 最常用 官网: docs.liquibase.com/commands/up… update-to-tag、update-to-tag-sql(changelog文件阶段性分部分(回滚点)的部署)- 建议常用这个取代update 官网: docs.liquibase.com/commands/up… 作用: 由于liquibase是按changeset节点在changelog的位置,按顺序的执行,这就导致可以在changeset之间设置一个标签(回滚点) () ,此命令只会部署当前节点以及当前标签节点之前的changeset节点,后面的直接忽略 //查看运行update-to-tag的SQL操作 liquibase update-to-tag-sql 标签名(回滚点) //根据标签进行部署changelog文件 liquibase update-to-tag 标签名(回滚点) changelog-sync 官网: docs.liquibase.com/commands/ma… 作用: 仅仅只是将changeLogFile里面的每条的changeset记录在DATABASECHANGELOG表中标记已经执行(但其实没执行任何有关changeLogFile里面的DDL语句) 使用场景: 某个项目中途引入了liquibase管理表结构SQL,一开始先使用generate-changelog生成当前数据库的表结构changelog文件,但是当你update的时候会直接报错,因为这些表都已经在当前数据库存在了,现在你只需要运行change-sync,默认当前changelog文件里面的SQL都是已经执行过的,在DATABASECHANGELOG表生成每个changeset执行记录,且EXECTYPE标记为已经执行EXECUTED,然后在udpate就不会报错了 clearCheckSums 官网: docs.liquibase.com/commands/ma… 官方定义: learn.liquibase.com/unit/view/i… 已升级 Liquibase 并希望使用最新版本重新计算校验和 开发中,您可能已经创建了多个更改,并希望通过操作changelog将这些更改组合成一个单一的变更集。您可能需要清除校验和才能完成此任务。 对存储的逻辑进行了更改,并使用与以前相同的文件,并希望使用新的存储逻辑来代替(这不是最佳实践,但可以这样做,因为存储的逻辑可以一遍又一遍地运行)。 想要克服错误,但不希望更改在下一次更新时运行。 开发人员修改了几个已经部署的脚本,现在 Liquibase update由于校验和错误而失败。 注意: 即使databasechangelog的记录标记已经执行,但只要update,liquibase都会去校验每条changset的MD5值,然后跟数据库存储的md5值进行不对,如果对不上则报错,没有则会填充进去数据库,然后下次update的时候在进行比对 mark-next-changeset-ran、mark-next-changeset-ran-sql 官网: docs.liquibase.com/commands/ma… 应用场景: 生产紧急情况,你手动上数据库进行更新数据库结构未经过liquibase运行,但你还是会在liquibase备份一份作为曾经执行过的DDL,但是该条changeset由于没有经liquibase执行,导致databasechangelog没有记录,则liquibase又会在执行一遍到时就报错了,所以避免这种由于紧急情况手动更改数据库但在liquibase有留changeset记录的,则使用markNextChangeSetRan命令让liquibase基于changelog生成一份已执行的databasechangelog记录,但不会将changset的SQL又重新作用于liquibase,相对于update,其实就是少执行了changset里面的SQL语句而已 //基于changlog生成一条未在databasechangelog存在的记录,并将其标记为已经执行 liquibase markNextChangeSetRan //查看运行markNextChangeSetRan的话将执行的SQL语句 liquibase markNextChangeSetRanSQL status:查看还有多少changeset是待部署状态 官网: docs.liquibase.com/commands/st… liquibase status --help //仅显示未部署的条数 liquibase status //建议使用这个:显示未部署条数以及哪些changeset没部署 liquibase status --verbose history:查看历史部署 官网: docs.liquibase.com/commands/st… liquibase history unexpected-changesets:排查出databasechangelog有部署日志但changlog文件没有changeset节点的databasechangelog记录(以整个databasechangelog表为准) 官网: docs.liquibase.com/commands/ma… //仅提示异常数量 liquibase unexpected-changesets //异常数量以及棘具体异常的标识也显示出来id、author liquibase unexpected-changesets --verbose 官网: docs.liquibase.com/change-type… 总结1: 涉及新增的结构、约束才支持回滚即生成回滚语句是:删除结构、约束,反过来则不支持自动回滚语句生成,需要自己自定义回滚语句节点 总结2: 如果不想语句有回滚语句,则在changeSet节点里面添加个空的节点 分类: 后端 标签: Java 安装掘金浏览器插件 多内容聚合浏览、多引擎快捷搜索、多工具便捷提效、多模式随心畅享,你想要的,这里都有! 前往安装 Java开发
官网: docs.liquibase.com/commands/up… 作用: 由于liquibase是按changeset节点在changelog的位置,按顺序的执行,这就导致可以在changeset之间设置一个标签(回滚点) () ,此命令只会部署当前节点以及当前标签节点之前的changeset节点,后面的直接忽略
//查看运行update-to-tag的SQL操作 liquibase update-to-tag-sql 标签名(回滚点) //根据标签进行部署changelog文件 liquibase update-to-tag 标签名(回滚点) changelog-sync 官网: docs.liquibase.com/commands/ma… 作用: 仅仅只是将changeLogFile里面的每条的changeset记录在DATABASECHANGELOG表中标记已经执行(但其实没执行任何有关changeLogFile里面的DDL语句) 使用场景: 某个项目中途引入了liquibase管理表结构SQL,一开始先使用generate-changelog生成当前数据库的表结构changelog文件,但是当你update的时候会直接报错,因为这些表都已经在当前数据库存在了,现在你只需要运行change-sync,默认当前changelog文件里面的SQL都是已经执行过的,在DATABASECHANGELOG表生成每个changeset执行记录,且EXECTYPE标记为已经执行EXECUTED,然后在udpate就不会报错了 clearCheckSums 官网: docs.liquibase.com/commands/ma… 官方定义: learn.liquibase.com/unit/view/i… 已升级 Liquibase 并希望使用最新版本重新计算校验和 开发中,您可能已经创建了多个更改,并希望通过操作changelog将这些更改组合成一个单一的变更集。您可能需要清除校验和才能完成此任务。 对存储的逻辑进行了更改,并使用与以前相同的文件,并希望使用新的存储逻辑来代替(这不是最佳实践,但可以这样做,因为存储的逻辑可以一遍又一遍地运行)。 想要克服错误,但不希望更改在下一次更新时运行。 开发人员修改了几个已经部署的脚本,现在 Liquibase update由于校验和错误而失败。 注意: 即使databasechangelog的记录标记已经执行,但只要update,liquibase都会去校验每条changset的MD5值,然后跟数据库存储的md5值进行不对,如果对不上则报错,没有则会填充进去数据库,然后下次update的时候在进行比对 mark-next-changeset-ran、mark-next-changeset-ran-sql 官网: docs.liquibase.com/commands/ma… 应用场景: 生产紧急情况,你手动上数据库进行更新数据库结构未经过liquibase运行,但你还是会在liquibase备份一份作为曾经执行过的DDL,但是该条changeset由于没有经liquibase执行,导致databasechangelog没有记录,则liquibase又会在执行一遍到时就报错了,所以避免这种由于紧急情况手动更改数据库但在liquibase有留changeset记录的,则使用markNextChangeSetRan命令让liquibase基于changelog生成一份已执行的databasechangelog记录,但不会将changset的SQL又重新作用于liquibase,相对于update,其实就是少执行了changset里面的SQL语句而已 //基于changlog生成一条未在databasechangelog存在的记录,并将其标记为已经执行 liquibase markNextChangeSetRan //查看运行markNextChangeSetRan的话将执行的SQL语句 liquibase markNextChangeSetRanSQL status:查看还有多少changeset是待部署状态 官网: docs.liquibase.com/commands/st… liquibase status --help //仅显示未部署的条数 liquibase status //建议使用这个:显示未部署条数以及哪些changeset没部署 liquibase status --verbose history:查看历史部署 官网: docs.liquibase.com/commands/st… liquibase history unexpected-changesets:排查出databasechangelog有部署日志但changlog文件没有changeset节点的databasechangelog记录(以整个databasechangelog表为准) 官网: docs.liquibase.com/commands/ma… //仅提示异常数量 liquibase unexpected-changesets //异常数量以及棘具体异常的标识也显示出来id、author liquibase unexpected-changesets --verbose 官网: docs.liquibase.com/change-type… 总结1: 涉及新增的结构、约束才支持回滚即生成回滚语句是:删除结构、约束,反过来则不支持自动回滚语句生成,需要自己自定义回滚语句节点 总结2: 如果不想语句有回滚语句,则在changeSet节点里面添加个空的节点 分类: 后端 标签: Java 安装掘金浏览器插件 多内容聚合浏览、多引擎快捷搜索、多工具便捷提效、多模式随心畅享,你想要的,这里都有! 前往安装 Java开发
官网: docs.liquibase.com/commands/ma… 作用: 仅仅只是将changeLogFile里面的每条的changeset记录在DATABASECHANGELOG表中标记已经执行(但其实没执行任何有关changeLogFile里面的DDL语句) 使用场景: 某个项目中途引入了liquibase管理表结构SQL,一开始先使用generate-changelog生成当前数据库的表结构changelog文件,但是当你update的时候会直接报错,因为这些表都已经在当前数据库存在了,现在你只需要运行change-sync,默认当前changelog文件里面的SQL都是已经执行过的,在DATABASECHANGELOG表生成每个changeset执行记录,且EXECTYPE标记为已经执行EXECUTED,然后在udpate就不会报错了
官网: docs.liquibase.com/commands/ma…
官方定义: learn.liquibase.com/unit/view/i…
注意: 即使databasechangelog的记录标记已经执行,但只要update,liquibase都会去校验每条changset的MD5值,然后跟数据库存储的md5值进行不对,如果对不上则报错,没有则会填充进去数据库,然后下次update的时候在进行比对
官网: docs.liquibase.com/commands/ma… 应用场景: 生产紧急情况,你手动上数据库进行更新数据库结构未经过liquibase运行,但你还是会在liquibase备份一份作为曾经执行过的DDL,但是该条changeset由于没有经liquibase执行,导致databasechangelog没有记录,则liquibase又会在执行一遍到时就报错了,所以避免这种由于紧急情况手动更改数据库但在liquibase有留changeset记录的,则使用markNextChangeSetRan命令让liquibase基于changelog生成一份已执行的databasechangelog记录,但不会将changset的SQL又重新作用于liquibase,相对于update,其实就是少执行了changset里面的SQL语句而已
//基于changlog生成一条未在databasechangelog存在的记录,并将其标记为已经执行 liquibase markNextChangeSetRan //查看运行markNextChangeSetRan的话将执行的SQL语句 liquibase markNextChangeSetRanSQL status:查看还有多少changeset是待部署状态 官网: docs.liquibase.com/commands/st… liquibase status --help //仅显示未部署的条数 liquibase status //建议使用这个:显示未部署条数以及哪些changeset没部署 liquibase status --verbose history:查看历史部署 官网: docs.liquibase.com/commands/st… liquibase history unexpected-changesets:排查出databasechangelog有部署日志但changlog文件没有changeset节点的databasechangelog记录(以整个databasechangelog表为准) 官网: docs.liquibase.com/commands/ma… //仅提示异常数量 liquibase unexpected-changesets //异常数量以及棘具体异常的标识也显示出来id、author liquibase unexpected-changesets --verbose 官网: docs.liquibase.com/change-type… 总结1: 涉及新增的结构、约束才支持回滚即生成回滚语句是:删除结构、约束,反过来则不支持自动回滚语句生成,需要自己自定义回滚语句节点 总结2: 如果不想语句有回滚语句,则在changeSet节点里面添加个空的节点 分类: 后端 标签: Java 安装掘金浏览器插件 多内容聚合浏览、多引擎快捷搜索、多工具便捷提效、多模式随心畅享,你想要的,这里都有! 前往安装 Java开发
官网: docs.liquibase.com/commands/st…
liquibase status --help //仅显示未部署的条数 liquibase status //建议使用这个:显示未部署条数以及哪些changeset没部署 liquibase status --verbose history:查看历史部署 官网: docs.liquibase.com/commands/st… liquibase history unexpected-changesets:排查出databasechangelog有部署日志但changlog文件没有changeset节点的databasechangelog记录(以整个databasechangelog表为准) 官网: docs.liquibase.com/commands/ma… //仅提示异常数量 liquibase unexpected-changesets //异常数量以及棘具体异常的标识也显示出来id、author liquibase unexpected-changesets --verbose 官网: docs.liquibase.com/change-type… 总结1: 涉及新增的结构、约束才支持回滚即生成回滚语句是:删除结构、约束,反过来则不支持自动回滚语句生成,需要自己自定义回滚语句节点 总结2: 如果不想语句有回滚语句,则在changeSet节点里面添加个空的节点 分类: 后端 标签: Java 安装掘金浏览器插件 多内容聚合浏览、多引擎快捷搜索、多工具便捷提效、多模式随心畅享,你想要的,这里都有! 前往安装 Java开发
liquibase history unexpected-changesets:排查出databasechangelog有部署日志但changlog文件没有changeset节点的databasechangelog记录(以整个databasechangelog表为准) 官网: docs.liquibase.com/commands/ma… //仅提示异常数量 liquibase unexpected-changesets //异常数量以及棘具体异常的标识也显示出来id、author liquibase unexpected-changesets --verbose 官网: docs.liquibase.com/change-type… 总结1: 涉及新增的结构、约束才支持回滚即生成回滚语句是:删除结构、约束,反过来则不支持自动回滚语句生成,需要自己自定义回滚语句节点 总结2: 如果不想语句有回滚语句,则在changeSet节点里面添加个空的节点 分类: 后端 标签: Java 安装掘金浏览器插件 多内容聚合浏览、多引擎快捷搜索、多工具便捷提效、多模式随心畅享,你想要的,这里都有! 前往安装 Java开发
//仅提示异常数量 liquibase unexpected-changesets //异常数量以及棘具体异常的标识也显示出来id、author liquibase unexpected-changesets --verbose 官网: docs.liquibase.com/change-type… 总结1: 涉及新增的结构、约束才支持回滚即生成回滚语句是:删除结构、约束,反过来则不支持自动回滚语句生成,需要自己自定义回滚语句节点 总结2: 如果不想语句有回滚语句,则在changeSet节点里面添加个空的节点 分类: 后端 标签: Java 安装掘金浏览器插件 多内容聚合浏览、多引擎快捷搜索、多工具便捷提效、多模式随心畅享,你想要的,这里都有! 前往安装 Java开发
官网: docs.liquibase.com/change-type… 总结1: 涉及新增的结构、约束才支持回滚即生成回滚语句是:删除结构、约束,反过来则不支持自动回滚语句生成,需要自己自定义回滚语句节点 总结2: 如果不想语句有回滚语句,则在changeSet节点里面添加个空的节点