超市管理数据库(超市门店库 → 中心库 自动同步方案(Liquibase 企业级落地版))

超市管理数据库(超市门店库 → 中心库 自动同步方案(Liquibase 企业级落地版))
超市门店库 → 中心库 自动同步方案(Liquibase 企业级落地版)

N 个门店数据库 → 中心数据库 自动同步(结构 + 数据)

支持:增量同步、定时同步、不重复、可追溯、可回滚。


一、业务场景说明

  • 门店库:每个超市一个独立库(MySQL/PostgreSQL)
  • 中心库:总部汇总库
  • 需求: 所有门店表结构自动和中心库保持一致 门店业务数据(订单、用户、库存)自动增量同步到中心库 全自动执行,无需人工操作 同步历史可查、失败可重试

二、最终方案架构(最稳定)

采用Liquibase + 自定义同步任务 组合

  1. Liquibase:负责结构同步(表、字段、索引统一)
  2. 定时同步程序:负责数据增量同步(门店→中心)

三、第一步:结构统一(Liquibase 负责)

目标

所有门店库的表结构 = 中心库结构

自动修复不一致的表 / 字段 / 索引


1. 统一配置文件(中心库作为标准)

liquibase.properties

properties

超市管理数据库(超市门店库 → 中心库 自动同步方案(Liquibase 企业级落地版))

# 目标库:门店库(会被自动同步)url=jdbc:mysql://门店IP:3306/store_dbusername=rootpassword=123456driver=com.mysql.cj.jdbc.Driver# 参考库:总部中心库(标准结构)referenceUrl=jdbc:mysql://中心库IP:3306/center_dbreferenceUsername=rootreferencePassword=123456changeLogFile=sync_structure.xml

2. 一条命令自动同步结构

bash

运行

java -jar liquibase.jar diffChangeLogjava -jar liquibase.jar update

✅ 所有门店库自动变成和中心库一模一样的结构

新增表、新增字段、添加索引 → 全部自动完成


四、第二步:数据同步(门店 → 中心 增量同步)

核心规则

  • 只同步新增 / 更新的数据(不重复同步)
  • 使用 update_time / id 做增量判断
  • 中心库建立门店 ID 标识,区分数据来源

1. 表结构必须增加 2 个字段(所有表)

sql

-- 用于增量同步ALTER TABLE xxx ADD COLUMN update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP;-- 用于标识来源门店ALTER TABLE xxx ADD COLUMN store_id VARCHAR(50) DEFAULT 'store_001';

Liquibase 可自动批量添加。


2. 自动同步数据脚本(可定时执行)

同步命令(Liquibase 数据对比同步)

bash

运行

java -jar liquibase.jar diffChangeLog --diffTypes=datajava -jar liquibase.jar update

推荐:企业级增量同步(Python / Shell 定时脚本)

我给你一个可直接使用的 Python 同步脚本:

python

运行

import pymysqlimport datetime# 门店库store_conn = pymysql.connect(    host="门店IP",    user="root",    password="123456",    database="store_db")# 中心库center_conn = pymysql.connect(    host="中心IP",    user="root",    password="123456",    database="center_db")# 同步逻辑:取5分钟内更新的数据last_sync = datetime.datetime.now() - datetime.timedelta(minutes=5)sql = f"SELECT * FROM order WHERE update_time > '{last_sync}'"# 执行同步...# 自动插入/更新到中心库

可设置 定时任务(crontab / Windows 任务计划)

每 1 分钟 / 5 分钟自动同步一次


五、第三步:批量管理 N 个门店(关键)

1. 门店配置清单

stores.conf

plaintext

store_001,192.168.1.10,store_dbstore_002,192.168.1.11,store_dbstore_003,192.168.1.12,store_db

2. 批量同步脚本(循环所有门店)

Shell 脚本示例:

bash

运行

cat stores.conf | while read linedo    name=$(echo $line | cut -d',' -f1)    ip=$(echo $line | cut -d',' -f2)    db=$(echo $line | cut -d',' -f3)    # 替换liquibase配置为当前门店    sed -i "s|jdbc:mysql://.*:3306.*|jdbc:mysql://$ip:3306/$db|" liquibase.properties    # 同步结构    java -jar liquibase.jar update    # 同步数据    python sync_data.py $name $ip $dbdone

✅ 运行一个脚本,所有门店自动同步到中心库


六、第四步:自动化部署(CI/CD)

你可以配合:

  • Jenkins
  • GitLab CI
  • K8s CronJob

实现:

代码提交 → 自动更新中心库结构 → 自动同步所有门店


七、最终效果(你能得到什么)

  1. 所有超市数据库结构 100% 统一
  2. 数据自动实时同步到总部
  3. 新增门店自动加入同步集群
  4. 结构变更自动下发
  5. 同步日志可查、可监控、可告警

💻 配套实训环境与动手练习

本文涉及的相关技术指令、开发环境与工具链已内置在边学边练在线实验室中,无需繁琐安装配置,随时在浏览器中实践体验:

文章版权声明:除非注明,否则均为边学边练网络文章,版权归原作者所有