主从复制面临的问题
MySQL一直以来的主从复制都是被诟病,原因是:
1、主从复制效率低
早期mysql的复制是通过将binlog语句异步推送到从库。从库启动一个IO线程将接收到的数据记录到relaylog中;另外启动一个SQL线程负责顺序执行relaylog中的语句实现对数据的拷贝。
这里的顺序执行就导致了主从复制效率低,异步的方式导致了主从数据的不一致。
2、宕机后主从复制数据不一致
刚刚提到异步的方式导致了主从数据的不一致。
当主节点宕机后,从节点晋升成主节点,如果这时有数据还未完成主从同步,那么就会导数据丢失。
一、5.5版本,主要解决数据一致性问题
添加了一个**semi-sync replication(半同步复制)**的插件,这个插件就是为了解决异步复制导致的数据不一致问题。
原理是在事物提交时,要求至少一个从节点返回ack
证明自己拿到了数据,并将数据写到了relay log中
。
这样能保证至少一个从节点和主节点数据是完全一致的。
优点:
- 保证主从数据一致性:在一主一从的情况下,不会有数据不一致性。
- 保证数据可靠性:只有主节点挂掉的情况下,也不会发生数据丢失问题。