背景:项目中存在多个不同子系统,每个子系统都拥有一套gbase集群,而有些表是各个子系统间公用的,如果各子系统只在自己的Gbase集群中更新公共配置,就会导致各子系统配置数据不一致,进而影响整个系统的功能功能,所以需要有一个框架来定时同步各子系统的配置数据。
问题:如何判断表变更?进行表同步时,考虑版本不同可能存在表结构差异,如何保证同步时让业务影响最小?
思路:1、gbase提供集群间同步工具是基于镜像集群的底层二进制同步工具,也就是要求两个集群结构(分片数量,节点数量,分布情况)完全相同。我们的子系统是根据各个集群数据量多少自由扩展,而非镜像集群,不满足,那么就只能自己开发同步进程。要做同步就必须能感知表的变更,通过表的变更触发同步。大部分关系型数据库都有触发器,但是gbase不太支持触发器,排除。gbase的审计日志gclusterdb.audit_log_express,属于事后分析,默认十分钟写一次,也只记录执行时间大于等于1秒的,必须执行 set global long_query_time=0,才会所有正常执行的操作都会记录(当然如果sql在执行过程中终止,比如ctrl c 这个好像不记录的)。开启所有记录对gbase有影响,也不推荐使用。最后跟gbase专家沟通,采用创建复制表,然后通过gnode 5050端口去判断表的状态更新时间可以确认是否变更。
CREATE TABLE "t6" (
"id" int(11)