小白白话技术之MYSQL的复制机制的介绍

要啥自行车一把梭 2020-03-06

       这是一篇关于MYSQL复制机制的一些思路白话介绍篇,希望直白的语言有助于你更容易理解MYSQL的复制机制。对于一个中间件,我们有很多要考虑的,比如希望可以提供水平扩展能力能够集群部署。

       Mysql是怎么设计解决这些问题呢?答案首先是复制,Mysql提供了一种复制机制,让多个Mysql可以实现数据同步。

       Mysql是如何实现数据同步的呢?首先主库会有记录二进制日志,这些日志记录了Mysql发生的事情,通过网络将这些数据同步给目标库,目标接收到二进制日志可以重放这些二进制日志,从而达到和主库同步的数据。那么具体复制的是什么呢?有俩种复制方式,一种是复制行数据,另外一种是复制语句。俩种方式适用的情况是不一样的。

       实际复制我们可能遇到俩种情况,一种是全新的俩个库复制,直接配置就好,另外一种是对已经存在的库进行复制,这需要先采用一定的方式同步之前的数据,然后在开始复制,具体怎么呢?比如可以先备份导出主库的数据,导入到目标库,然后在开始复制。

        再介绍一下行复制和语句复制的区别,首先语句复制是指把主库的语句复制到备库在执行一遍,这样做的好处是可以把对数据表的变化直接变更到目标库上,比如加字段语句,缺点是基于语句的复制有事不能被很好的支持,比如说一些高级特性如存储过程等,所以用到存储过程或触发器就不要用语句复制了。基于行的复制是指把数据表中的实际数据复制到日志中,目标库直接写入实际数据。这种方式的优点是几乎所有场景都支持这种方式进行复制,可以减少锁的使用,缺点是无法知道了执行了什么sql,相当于一个黑盒,不利于分析监控。

         因为有些场景下语句复制合适,有些行复制合适,所以mysql是可以动态切换俩种方式的。因为涉及到网络同步,那种同步的数据量少更高效自然也是一个重要的考量。

         有了复制机制,就可以组建不同的集群模式了,比如一主一从,一主多从,主主,甚至树或金字塔结构的拓扑,需要按照需求选择合适的集群模式,比如容量的需求,应用需求等等。

         当然,关于集群还有一些功能是需要的,如配置、监控、管理优化等,这些可以借助第三方的工具来做。

         复制失败是一个必须面对的问题,当然不一定必须用mysql自己的复制机制可以很多第三方选择,但是mysql自己的复制机制可能是简单易用的,适用于大多数情况。那么具体可能遇到哪些问题呢?比如对于大数据包的复制延迟,比如磁盘不足,比如网络带宽不足,比如目标库发生数据变化等等。

相关推荐