Mysql复制(Master/Slave实现)

1、Mysql复制方式:

              * 基于行的复制(5.1中引入)

              * 基于语句的复制

      注:都是通过在主库上记录binlog、在备库上重放日志的方式来实现异步的数据复制的。这意味着,在同一时间点备库上的数据可能与主库存在不一致性,并且无法保证主备之间的延迟。


2、应用场景:

               * 数据分布: Mysql复制通常不会对带宽造成很大的压力,但是基于行的复制会比传统的基于语句复制模式的带宽压力更大些。

               * 负载均衡: 通过Mysql复制可以装读操作分布到多个服务器上,实现对读密集型应用的优化,并且实现方便,通过简单的代码就可以实现基本的负载均衡。(如:对机器人名做硬编码或将一个机器名指向多个IP地址。等等)

               * 备份数据

               * 高可用性和故障切换

              * Mysql升级测试


3、复制工作流:

              1)在主库上把数据更改记录到二进制日志中。

                        每次准备提交事务完成数据更新前,主库将数据更新的事件记录到二进制日志中。Mysql会按事务提交的顺序而非每条语句的执行顺序来记录二进制日志。记录完  成后,主会告诉存储引擎可以提交事务;

               2)备库将主库上的日志复制到自己的中继日志中。

                            由备库启动一个工作线程,称为I/O线程, 跟主库建立一个连接,然后在主库上启动一个特殊的二进制转储(binlog dump)线程(该线程没有对应的sql命令),这个二进制转储线程会读取主库上二进制日志中的事件。它不会对事件进行轮询。如果该线程追赶上主库,将进入休眠状态,直到主库发送信号通知其有新的事件产生才会被唤醒,备库IO线程会将接收到的事件记录到中继日志中。

               3)备库读取中继日志中的事件,将其重放在备库数据之上。


4、XXOO:

              Mysql基于语句与行复制,感觉与Redis的RDB与AOF实现都差不多。 估计Master与Slave这样的架构都这么实现吧


郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。