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这样的架构都这么实现吧
时间: 2024-09-29 21:06:53