字服务器数据库数据变动时
实时上传和更新至主机数据库
例如点菜系统的同步方式
两个电脑 把A电脑的数据库的表C数据变动 同步至B电脑的数据库表C
其中 A电脑的表C数据 和B电脑的表C数据内容不一样 结构一样
例:A电脑表C 只有本机数据 B电脑表C 有A电脑表C的数据和B电脑表C的数据
字服务器数据库数据变动时
实时上传和更新至主机数据库
例如点菜系统的同步方式
两个电脑 把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那个方案