《高性能MySQL》(第三版)之六:MySQL复制

        最近几天,算是一口气把这本书剩下的内容给看完了吧,全记住当然也不现实,但是至少总体上有点认知。总的来说,剩下的内容基本上在讲mysql的其他方面的优化操作,来达到高性能的目的,这也照应了本书的标题。比如服务器配置上的优化操作、musql配置上的优化操作,以及往外扩展之web应用层的优化,从而努力达到高性能、高扩展。其实读到这里的内容,我一下子就想起了之前读过的一本书,李智慧的《大型网站技术架构·核心原理与案例分析》,整本书是我在毕业半年后读的,也是我读的第一本扩展性的书。这本书打开了我对互联网行业认识的大门,扩宽了理解的视野,而不再只是单纯的把理解认知局限在SSM的小池子里。这本书里面讲解了很多互联网行业的基本结构体系的知识内容,虽然大多数内容都不算深入,但是对于当时的我,内容可以说是很全面了,扩展视野很有帮助。比如里面的负载均衡算法,分布式缓存一致性等内容,可以说是印象深刻。以至于现在看到《高性能Mysql》里面的负载均衡算法的内容,还能立马回想起来以前的场景,心中暗暗感叹作者的妙,以至于自己都禁不住笑了起来,这何尝不也是一种趣味呢?

        跑题了跑题了哈,回到正轨。就是说这些内容呢,其实没必要再去加强机械记忆了,而是应该在了解的基础上,把这一部分内容当做工具手册来用,在实践中摸索查阅,探索最佳经验,因为没有一成不变的万能方案。所以,我决定把最重要的复制特性单列一篇文章出来,简明扼要,达到了解原理,理解经验的目的就可以了,至于其他的内容就不再赘述,就像我刚说的当做工具资料查阅来用就行了。

6.1、复制概述:

        其实就是让一台服务器和其它服务器保持同步。有两种方式,基于行或者基于语句,无论哪种方式都是在主库上记录二进制日志,备库上重放日志,从而实现异步数据复制。(既然是异步,所以有延迟)。

复制有三个步骤:
1、主库将数据更改记录到二进制日志(binary log)中,这些记录叫做二进制日志事件
2、从库通过I/O线程读取主库中的二进制日志事件并写入到自己的中继日志(relay log)
3、从库执行SQL线程重做中继日志中的事件,把中继日志中的事件信息逐条在本地执行一次,将数据写入从库

图片来源于网络

注意:主库上并发运行的查询在备库上只能串行化执行,因为只有一个sql线程重放中继日志中的事件。

6.2、复制原理:

        基于语句的复制:主库会记录那些造成数据更改的查询,当备库读取并重放这些事件,实际上只是把主库执行过的sql在执行一遍。适用于更灵活的操作,出现问题方便定位,但是不适用于有触发器或存储过程的情况。

        基于行的复制:将实际数据记录在二进制日志中,无需重放更新主库数据的查询,复制数据.更高效。可能减少锁的使用,占更少的CPU(无须为查询建立执行计划并执行查询),但无法判断执行了哪些sql。

        默认使用基于语句的方式,但是能动态切换到基于行。

        如果设置了log_slave_updates参数,备库会把sql线程已经读过的中继日志中的事件写到自己的二进制日志中,这样别的备库可以把当前备库当主库,把这个事件读取到自己的中继日志并执行。这样实现了主库可以把数据变化传递给没有与他直接相连的备库上。

        mysql在复制过程中如何预防无线循环?其实复sql线程读中继日志时,会丢弃事件中记录的服务器id和当前服务器本身id相同的事件,这样就打破了复制过程中的无限循环。

 

6.3、复制拓扑结构:

        前提:一个备库只能有一个主库 !!!

6.3.1、一主多备

                适用于少量写和大量读,可以把读分摊到多个备库。

 

6.3.2、主-主模式下的主主复制

                两台服务器,每一台都被配置成对方的主库和备库,彼此是一队主库。mysql不支持多主库复制,此方式弊大于利。

 

6.3.3、主-被模式下的主主复制

                此方式功能强大,其中一台是只读的被动服务器,这样的配置是对称的,使得反复切换主动与被动服务器很方便。这种结构从意义上来说相当于创建了一个热备份,通过利用这个热备份以及主备随时切换,来提升性能。

 

6.3.4、拥有备库的主-主模式

                优点是增加了冗余,消除了不同地理位置的单点失效问题。

 

 

6.3.5、环形复制

                每个服务器都是他之前的服务器的备库,是他之后服务器的主库,此模式比较脆弱,尽量避免,任何一个节点失效,从这个节点发起的事件就会出现无限循环。

 

6.3.6、树形或金字塔形

                在将主库数据大量复制到备库的过程中,可以减轻主库负担,但如果中间层有问题,会影响到其下层的多个服务器。

 

        至于其它的复制相关内容,暂时就不再赘述了,比如复制的常见问题、解决方案、复制的管理维护等等,需要的时候做一下翻阅就行。如果单写,每一块都可以再开一篇文章了。本文开篇也已经提及过。在本书的附录部分,我觉得有两块内容挺实用,一个是关于explain命令的详解,另一个是锁的调试,也建议有需要的朋友多看看了解,对日常工作中的sql性能分析优化还是很有帮助的。

        至此,历时一个月吧,终于把这本750页的厚书给啃了一遍,算是全面品味一下mysql。按理说,这件事情前两年就应该要做了,毕竟这本书已经买了四年了,之前零星的翻阅过,查阅过一些资料,但是从没完整了解翻阅过本书,惭愧惭愧。(小声嘀咕,类似的惭愧后续肯定还有很多……)

        好吧,简单小结一下就是,前六章多多掌握,应对工作中常见的mysql开发任务或问题完全OK,别的章节多熟悉下内容安排,在工作中遇到问题可以想到这里有工具方案可以查阅就行了。那就完结撒花吧,继续开始新的征程!

             

PS:本系列pdf汇总版文档,可以在微信公众号回复输入“高性能”获取文档下载链接。千万别忘了分享呀!

 

码字不易,感谢支持! 点关注,下次相遇不迷路!

欢迎关注微信公众号:独行侠的守望

    - - 无论如何都要坚定的前行,去拼搏,去奋斗。爱生活,爱自己!码农一枚,主要分享生活日常、兴趣爱好,记录成长。欢迎一起交流!

                                        https://img-blog.csdnimg.cn/20210105215405423.png

本文同步发布于个人网站:https://www.yuanhuiying.com    进入主站点击“愚默博客“标签页进行访问。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值