qq1104682401 2019-08-30 11:02 采纳率: 100%
浏览 4364
已采纳

JAVA 两个数据库 的某个表数据同步

字服务器数据库数据变动时

实时上传和更新至主机数据库

例如点菜系统的同步方式

两个电脑 把A电脑的数据库的表C数据变动 同步至B电脑的数据库表C
其中 A电脑的表C数据 和B电脑的表C数据内容不一样 结构一样
例:A电脑表C 只有本机数据 B电脑表C 有A电脑表C的数据和B电脑表C的数据

  • 写回答

8条回答 默认 最新

  • No_Bug_ 2019-08-31 15:47
    关注

    三种方案:
    1.数据库触发器
    在A电脑C表中建立触发器,然后将C表的增删改记录下来,放到一个中间表中,中间表中记录动的是哪个表,什么时间,id之类的数据,
    然后写个跑批服务,定时去拉取中间表数据进行处理,新增到B电脑C表中。这种方案,数据可能同步有延迟,而且数据量大的时候,延迟更长
    适合改动量不是太大的表,比如学校表,区域表等。

    CREATE TRIGGER `test_insert` AFTER INSERT ON `表名` FOR EACH ROW begin
    insert into sync_basic_data(table_name, primary_key,operation_type)
    values('表名', new.id,1);
    end;
    
    CREATE TRIGGER `test_update` AFTER UPDATE ON `表名` FOR EACH ROW begin
    insert into sync_basic_data(table_name, primary_key,operation_type)
    values('表名', new.id,2);
    end;
    
    CREATE TRIGGER `test_delete` AFTER DELETE ON `表名` FOR EACH ROW begin
    insert into sync_basic_data(table_name, primary_key,operation_type)
    values('表名', old.id,3);
    end;
    

    图片说明

    2.mysql的binlog
    mysql主从复制:mysql replication在master端开启binlog,master把它的二进制日志传递给slaves来达到master-slave数据一致的目的
    这个可以具体调研下,我没搞过。但是这个大部分的同步数据都是用的binlog,当改动这张表的服务很多时,没法去每个服务里面写代码就可以使用触发器或者binlog,只关注表的改动就行了。这个可以使用消息来处理,扫描一行发个消息,然后开发服务来处理这些消息。

    3.在服务上动手脚,在改动C表的代码之前加代码,可以将修改记录存入数据库,也可以直接发消息。

    说到底,要想同步,要么用主从备份,或者第三方的同步方案。如果自己写的话,用触发器工作量最小,直接写个跑批服务就行了,剩下的可能都要写很多服务。如果对数据要求很严,而且数据变动很频繁建议使用binlog那个方案

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(7条)

报告相同问题?