PXC是基于引擎层的同步复制,而不是异步复制,所以数据一致性更高。
同时,基于引擎层,没有sql thread应用过程,所以没有延迟。
多个节点同时更新到同一行记录,无法避免更新丢失问题,所以建议写操作在一个节点上(对insert影响不大,可以多个节点insert)。
每台机器上的Server-id不要相同,否则只会在写的那台机器上生成binlog,其他节点不生成binlog,这是一个坑。每个节点Server-id设置为不同值,则每个节点都一个份全量的binlog,每个节点都可以挂slave从库。
在这种情况下,是不是slave可以随便Change到任何一个机器上(不管有没有GTID)?也就是说三个节点的show master status输出结果是不是一样的?
这可不一定,因为每个节点的binlog裁剪时间可能不同。比如你在一个节点flush logs,其他节点不会切换binlog。所以show master status不是一样的,不能随便的change到任何一个节点上。需要去看看到底到什么位置了。
新加节点时,怎样防止传全量给新节点?也就是说怎样实现传增量的方式加节点?
方法是新节点先设成从库,然后将从库转入PXC集群。
PXC和MM架构更新丢失示例
t1: A,B 都读到old值
t2: A基于old值进行更新new_v1
t3: B基