主从同步的优点:
Binlog&Undolog
二进制日志(Binlog):存储的是一个又一个事件(Event),这些事件分别对应着数据库的更新操作,比如INSERT、UPDATE、DELETE
undo_logo: Undo Log保存了历史快照
主从同步的原理就是基于Binlog进行数据同步的。在主从复制过程中,会基于3个线程来操作,一个主库线程,两个从库线程。
主库同步之间的网络延迟,可能会造成主从数据不一致的情况。(同步过程中会对Binlog加锁,不会造成数据不一致的情况)
异步复制
是客户端提交COMMIT之后不需要等从库返回任何结果,而是直接将结果返回给客户端。
好处:不会影响主库写的效率
坏处:但可能会存在主库宕机,而Binlog还没有同步到从库的情况,也就是此时的主库和从库数据不一致。
半同步复制
客户端提交COMMIT之后不直接将结果返回给客户端,而是等待至少有一个从库接收到了Binlog,并且写入到中继日志中,再返回给客户端。
好处就是提高了数据的一致性
坏处:相比于异步复制来说,至少多增加了一个网络连接的延迟,降低了主库写的效率。
在MySQL5.7版本中还增加了一个rpl_semi_sync_master_wait_for_slave_count
参数,我们可以对应答的从库数量进行设置,默认为1,也就是说只要有1个从库进行了响应,就可以返回给客户端。如果将这个参数调大,可以提升数据一致性的强度,但也会增加主库等待从库响应的时间。
组复制:
组复制技术,简称MGR(MySQL Group Replication)