Java教程

(十三)主从同步

本文主要是介绍(十三)主从同步,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

主从同步的优点:

  • 读写分离提高数据库并发处理能力
  • 数据备份
  • 高可用性。也就是当服务器出现故障或宕机的情况下,可以切换到从服务器上,保证服务的正常运行。

Binlog&Undolog

二进制日志(Binlog):存储的是一个又一个事件(Event),这些事件分别对应着数据库的更新操作,比如INSERT、UPDATE、DELETE

undo_logo: Undo Log保存了历史快照

1. 主从同步原理:

主从同步的原理就是基于Binlog进行数据同步的。在主从复制过程中,会基于3个线程来操作,一个主库线程,两个从库线程。

  • 数据库进行更新的事件写入Binlog日志
  • 主库转储并发送Binlog。当从库线程连接的时候,主库可以将二进制日志发送给从库,当读取Binlog的时候,会在Binlog上加锁,读取完成之后,再将锁释放掉。
  • 从库IO线程,连接到主库,向主库发送请求更新Binlog或接受Binlog,拷贝到本地形成中继日志(Relay log)
  • 从库SQL线程会读取从库中的中继日志,并且执行日志中的事件,从而将从库中的数据与主库保持同步。

2. 主从一致性

主库同步之间的网络延迟,可能会造成主从数据不一致的情况。(同步过程中会对Binlog加锁,不会造成数据不一致的情况)

异步复制

是客户端提交COMMIT之后不需要等从库返回任何结果,而是直接将结果返回给客户端。

好处:不会影响主库写的效率

坏处:但可能会存在主库宕机,而Binlog还没有同步到从库的情况,也就是此时的主库和从库数据不一致。

半同步复制

客户端提交COMMIT之后不直接将结果返回给客户端,而是等待至少有一个从库接收到了Binlog,并且写入到中继日志中,再返回给客户端。

好处就是提高了数据的一致性

坏处:相比于异步复制来说,至少多增加了一个网络连接的延迟,降低了主库写的效率。

在MySQL5.7版本中还增加了一个rpl_semi_sync_master_wait_for_slave_count参数,我们可以对应答的从库数量进行设置,默认为1,也就是说只要有1个从库进行了响应,就可以返回给客户端。如果将这个参数调大,可以提升数据一致性的强度,但也会增加主库等待从库响应的时间。

组复制:

组复制技术,简称MGR(MySQL Group Replication)

这篇关于(十三)主从同步的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!