主从复制由三种方式

异步复制

主库将事务Binlog事件写入到Binlog文件中,此时主库只会通知一下Dump线程发送这些新的Binlog,然后主库就会继续处理提交操作,而此时不会保证这些Binlog传到任何一个从库节点上。

全同步复制

当主库提交事务之后,所有的从库节点必须收到,APPLY并且提交这些事务,然后主库线程才能继续做后续操作。这里面有一个很明显的缺点就是,主库完成一个事务的时间被拉长,性能降低。

半同步复制

介于全同步复制和异步复制之间的一种,主库只需要等待至少一个从库节点收到并且Flush Binlog到Relay Log文件即可,主库不需要等待所有从库给主库反馈。同时,这里只是一个收到的反馈,而不是已经完全执行并且提交的反馈,这样就节省了很多时间。

Image [17].png

主从库延迟解决方案

同步写主从,数据读从库,这种方式性能不高

Image [18].png

写主库+读主库,从库仅作数据备份用,这种方式对于主库压力大,性能也不高

Image [19].png

设置一个缓存,用以保存最新数据,且需要设置一个大于数据库同步最大延迟的过期时间

Image [20].png