1.复制的概述
Mysql支持两种复制方式,基于行的复制和基于语句的复制。这两种方式都是通过在主库上记录二进制日志、在备库重放日志的方式来实现异步的数据复制。
在同一时间点备库上的数据可能与主库存在不一致,并且无法保证主备之间的延迟。
复制通常不会增加主库的开销,主要是启用二进制日志带来的开销,但是出于备份或及时从崩溃中回复的目的,这点开销是必要的。
通过复制可以将读操作指向备库来获得更好读读扩展。写操作一般都是在主库上写。在一主库多备库读架构中,写操作会被执行多次,这时候整个系统读性能取决于写入最慢读那部分。
常见读复制方案:
- 主 -备 -备:一个备库从主库copy数据,其余读备库从备库中copy数据。
- 主- 备 :所有读备库从主库中copy数据。
2.复制解决读问题
- 数据分布:将数据分布在不同读数据中心中。
- 负载均衡:通过Mysql复制可以将读操作分布到多个服务器上,实现对密集型应用对优化,并且实现很方便,通过简单对代码修改就能实现基本对负载均衡。
- 备份:复制是备份对补充,但复制不是备份也不能取消备份。
- 高可用性和故障切换:避免单点失败,设计良好但故障切换
- MySql 升级测试:保证读写的按预期实现。
3.复制如何工作
- 3.1 在主库上把数据更改记录到二进制日志(Binary Log)中。
- 3.2 备库将主库的日志复制到自己的中继日志(Relay Log)中。
- 3.3 备库读取中继日志的事件,将其重放到备库数据之上。
这种复制架构实现了获取事件和重放事件的解耦,允许这两个过程异步进行。但是也限制了复制过程,最重要的就是主库上并发运行的查询在备库上只能串行化执行。因为只有一个SQL线程来重放中继日志中的事件。