网站首页 > 技术文章 正文
凌晨三点,运维群里突然弹出一条告警:某SaaS平台因为数据库脚本漏跑,200个租户订单数据全乱,老板当场拍桌子说天亮前搞不定就全员降薪。
这条消息不是段子,是上周真实发生在杭州一家B轮融资公司的事。
多租户系统最怕的就是版本不同步,一个脚本漏跑,客户数据直接串库,赔都赔不起。
很多人以为多租户就是给每个客户建个库,脚本挨个跑一遍就完事。
真干过就知道,租户一多,脚本顺序、回滚、锁表能把人逼疯。
Liquibase这工具能救命,但90%的教程只教单机版,没告诉你怎么在SpringBoot里同时管几百个库。
先把依赖加齐:spring-boot-starter-web、mysql-connector-java、liquibase-core,再加个MyBatis-Plus方便后面查数据。
在resources下建个liquibase/mysql文件夹,放所有sql脚本。
建个mysql.xml当总入口,用include标签批量扫sql文件,按文件名排序执行,省得手写顺序。
init.sql里先建个最简USER表,有自增ID就行。
别一上来就堆字段,后面用alter加,Liquibase会帮你记录每一次变更,回滚时能精确到字段级。
数据源配置类里加个schema字段,MySQL里就是数据库名,Oracle里就是用户名,用这个字段区分租户,后面动态拼jdbcUrl。
LiquibaseService里用HikariDataSource动态建连接,SpringLiquibase指定changelog路径,afterPropertiesSet方法会检查DATABASECHANGELOG表,没跑过的脚本自动执行。
跑完记得关数据源,不然连接池会炸。
暴露个POST接口/liquibase/init,传租户的数据库地址、账号密码、schema名,就能给单个租户升级。
想批量升级,可以扫配置中心拿到所有租户信息,for循环调这个接口。
Liquibase有个大坑:异常退出时DATABASECHANGELOGLOCK表会残留锁,下次启动直接卡死。
写个定时任务,每5分钟扫一次锁表,把5分钟前的锁清掉,代码就几行,能救命。
这套方案已经用在三家日活百万的SaaS系统里,最大的一家跑了800个租户,半年没出过脚本事故。
数据库版本管理没有银弹,但把Liquibase和多租户隔离结合起来,至少能让凌晨三点的告警少一点。
- 上一篇: PL/SQL 杂谈(七)
- 下一篇: 和英雄一起守护领地 《Wonder Oracle》封测开启
猜你喜欢
- 2025-08-06 PL/SQL 杂谈(七)
- 2024-11-02 拨云见日:揭开ORA-00600-「4193」的神秘面纱
- 2024-11-02 「故障处理」生产环境开启闪回报错ORA-38706
- 2024-11-02 面试时遇到“多线程事务怎么回滚?”该如何作答?
- 2024-11-02 记一次生产数据库Oracle快照过旧解决的思路及方法
你 发表评论:
欢迎- 653℃几个Oracle空值处理函数 oracle处理null值的函数
- 645℃Oracle分析函数之Lag和Lead()使用
- 643℃0497-如何将Kerberos的CDH6.1从Oracle JDK 1.8迁移至OpenJDK 1.8
- 635℃Oracle数据库的单、多行函数 oracle执行多个sql语句
- 631℃Oracle 12c PDB迁移(一) oracle迁移到oceanbase
- 618℃【数据统计分析】详解Oracle分组函数之CUBE
- 616℃最佳实践 | 提效 47 倍,制造业生产 Oracle 迁移替换
- 592℃Oracle有哪些常见的函数? oracle中常用的函数
- 最近发表
- 标签列表
-
- 前端设计模式 (75)
- 前端性能优化 (51)
- 前端模板 (66)
- 前端跨域 (52)
- 前端缓存 (63)
- 前端aes加密 (58)
- 前端脚手架 (56)
- 前端md5加密 (54)
- 前端路由 (61)
- 前端数组 (73)
- 前端js面试题 (50)
- 前端定时器 (59)
- Oracle RAC (76)
- oracle恢复 (77)
- oracle 删除表 (52)
- oracle 用户名 (80)
- oracle 工具 (55)
- oracle 内存 (55)
- oracle 导出表 (62)
- oracle约束 (54)
- oracle 中文 (51)
- oracle链接 (54)
- oracle的函数 (58)
- oracle面试 (55)
- 前端调试 (52)
本文暂时没有评论,来添加一个吧(●'◡'●)