Liquibase 数据库变更管理入门3 步让数据库像代码一样版本化【免费下载链接】liquibaseMain Liquibase Source项目地址: https://gitcode.com/GitHub_Trending/li/liquibase你的团队是不是也这样上线前一天DBA 手工把 SQL 脚本跑一遍跑完发现少了一条两周后同事再执行报表已存在想回滚只能翻聊天记录找旧脚本。这个痛点正是 Liquibase 数据库变更管理工具要解决的。Liquibase 是当前最流行的开源数据库变更管理工具它把每次数据库改动写成带编号的变更集changeSet像 Git 管理代码一样管理数据库结构谁改的、改了什么、哪些已执行全部有记录。先看一张图建立直观印象上图是 Liquibase 在 CI 流水线中做变更预执行检查dry-run的流程。它可以在真正动数据库之前先演练一遍所有变更把风险挡在上线前。下面我们用一条最省事的上手路线20 分钟跑通全流程。第一步用 Docker Compose 一键跑通最小示例不用装 Java、不用配数据库仓库里自带一个完整示例docker/examples/docker-compose。克隆项目后直接执行git clone https://gitcode.com/GitHub_Trending/li/liquibase cd liquibase/docker/examples/docker-compose docker compose up这个 compose 文件会同时启动两件事一个 PostgreSQL 容器以及一个 Liquibase 容器。Liquibase 容器启动后会自动执行update命令把changelog/目录下的变更日志全部应用到数据库。跑完后进入数据库看一眼docker exec -it liquibase_postgres psql -U liquibase -d liquibase_demo \l 列出所有表你会发现两张表业务表users已经建好并插入了两行数据另外还有 Liquibase 自己维护的DATABASECHANGELOG表——所有已执行变更的账本就在这里。核心概念changelog 是施工图changeset 是每一步新手最容易懵的是 changelog 和 changeset 的关系。打个比方changelog 是一份数据库改造的总施工图changeSet 是图上的每一个施工步骤每个步骤有唯一的id author组合作为身份证号。打开示例里的001-create-users-table.xml结构非常直观changeSet id1 authordocker-compose-example createTable tableNameusers column nameid typeSERIAL autoIncrementtrue constraints primaryKeytrue nullablefalse/ /column column nameusername typeVARCHAR(50) constraints nullablefalse uniquetrue/ /column /createTable /changeSet而db.changelog-master.xml就是总施工图用include把各文件按顺序拼起来。Liquibase 每次执行时都会对照DATABASECHANGELOG表只执行没跑过的 changeSet——这就是它不会重复报表已存在的原因。实战场景一日常变更与回滚假设业务要求给users表加一个nickname字段。你只需要新增一个文件003-add-nickname.xmlchangeSet id3 authordocker-compose-example addColumn tableNameusers column namenickname typeVARCHAR(50)/ /addColumn /changeSet然后在主文件里加一行include file003-add-nickname.xml relativeToChangelogFiletrue/再次执行update即可。想撤销运行liquibase rollback-count 1它会回滚最近一个 changeSet比手工写逆向 SQL 可靠得多。实战场景二用 history 与 status 掌控发布现场上线前问自己三个问题哪些变更已执行哪些还没跑上次谁动了数据库一条命令就能回答liquibase status --verbose # 列出未执行的变更 liquibase history # 查看执行历史与结果配合update-sql命令你还能只输出将要执行的 SQL 而不真正执行供 DBA 评审后再放行这正是上图 dry-run 流程的本地版。避坑清单新手最常见的四个坑忘记改主文件新建了 XML 却没在db.changelog-master.xml里include变更永远不会生效。乱改已发布的 changeSet一旦执行过修改内容会导致 checksum 校验失败。正确做法是新增一个 changeSet 去修改而不是编辑旧的。连接参数写错Docker 场景里数据库地址要用服务名postgres而不是localhost示例的liquibase.properties已为你写好了正确值。忽略 relativeToChangelogFile子文件引用的资源建议都用相对路径否则换环境就找不到文件。收尾延伸下一步往哪走跑通示例后推荐你按这个顺序进阶先读仓库里的docker/examples/下其他数据库MySQL、Oracle、MSSQL的 Dockerfile了解如何给镜像追加驱动再研究liquibase-standard模块中的diff相关类学习用diff-changelog从现有数据库反向生成变更日志这在新项目接手老库时是救命技能。把 Liquibase 纳入你的 CI 流水线数据库变更管理才算真正闭环。记住一条原则永远通过 changelog 改数据库而不是直接改数据库。坚持这个习惯数据库发布将不再是你最担心的环节。【免费下载链接】liquibaseMain Liquibase Source项目地址: https://gitcode.com/GitHub_Trending/li/liquibase创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考