首先声明一下,双主这种架构个人不怎么喜欢,所以这里只做简单说明与吐槽
M/S(A) <====> S/M(B)
为什么要这么做呢?有什么意义呢?
我也不知道
主上操作change masterstart slave机器A
auto_increment_increment 自增值设置为2机器B
auto_increment_increment 自增值设置为2auto_increment_offset 起始值也设置为2tips:session级别的参数,不能用set globalA1 3 5 7B2 4 6 8
这样就可以双写了,带有自增的insert没问题
但极力不推荐
一张表上如果有唯一索引,即使是自增,也会完蛋
A上同步到B,B上写,就会报duplicate,这还比较好,至少两边数据还是一致的
万一A还没同步到B,B上插入也成功了,两边都成功了复制是失败的,这咋办?两边数据都不一致了,对不起来
解决不了update问题
同一条记录在两个节点上更新,前面一个更新的节点数据被覆盖,就更新丢失了
双写存在很多问题
综上:所以双主用来做选主的架构其实也不多了,很落后,双主做双写很危险
应用层控制双写,如果能解决上面说的问题就可以用,但是很难
如果做到的话,对写入的带宽有很大提升
tips:
①A同步到B,为什么B不会再推到A,这样无限循环?
因为同步的记录是带有server-id的,检测到要发送的server-id就是接收过来的server-id就不会发了
②oracle的rac为什么可以双写?
拒绝交叉写入