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

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

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

例如点菜系统的同步方式

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

三种方案:
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那个方案

要啥触发器!正确的做法应该是在主机上起一个定时任务,定时(一分钟,10秒钟)自动通过接口拉取子服务器新增数据。子服务提供相关接口。或者主服务提供接口子服务实时推送数据

可以写一个触发器实现 奖赏的分好高呀 等我闲了再帮你好好想想

1、触发器做最好
2、在监控所有调用A电脑修改表C数据的程序中 同时 加入对B电脑表C的逻辑

主服务器端做一个服务,子机在数据表更改时(或其他要更新主服务器上数据时),调用主服务器接口,主服务器根据子机传来的数据信息进行数据表同步或其他数据更新即可。

你这个用分库分表做就是了,可以看一下sharding-jdbc

https://blog.csdn.net/iteye_3872/article/details/82486205

可以使用阿里的otter吧