MySQL中主从复制的原理

来源:互联网 发布:程序员入门必看的书籍 编辑:程序博客网 时间:2024/06/05 14:45
MySQL中的复制:
复制解决的问题:让一台服务器的数据与其他服务器保持同步;
主库+备库【从库】;

基于行的复制:from V5.1;
基于语句的复制:逻辑复制,from V3.23
1.都是通过在主库上记录二进制日志,在备库重放日志的方式来实现异步的数据复制;
2.复制向后兼容:新版本的服务器可以作为老版本服务器的备库,反过来可能就不行;
3.开销:启用二进制日志带来的开销,每个备库也会对主库增加一些负载(网络IO开销)。锁的竞争也可能阻碍事务的提交。从主库复制到多个备库,唤醒多个复制线程发送事件的开销将会累加。
4.通过复制可以将读操作指向备库来获得更好的读扩展;对于写操作除非设计得当,否则并不适合通过复制来扩展写操作。一主库多备库中,写操作会被执行多次,这时候系统性能取决于写入最慢的那部分。
5.一主库多备库架构时,可能会造成一些浪费。它会复制大量不必要的重复数据;
一个主库和10个备库,会有11份数据拷贝,并且这11台服务器缓存中存储了大部分相同的数据。
6.复制比较常见的用途:
数据分布:复制通常带宽压力不大,但是基于行的复制会比传统的基于语句的复制模式的带宽压力更大;
负载均衡:通过复制可以将读操作分布到多个服务器上,实现对读密集型的应用的优化;
简单的代码修改就可以实现基本的负载均衡;小规模的可以简单的对机器名硬编码或者DNS轮询(将一个机器名指向多个IP地址);
备份:对于备份来说,复制是一项很有意义的技术补充,但是复制既不是备份也不是能够取代备份;
高可用性和故障切换:避免单点失败;
MySQL升级测试:更好版本的作为备库;

2. 复制的步骤:
2.1 把主库上数据更改记录到二进制日志(Binary Log)中(二进制日志文件);
2.2 备库将主库上的日志复制到自己的中继日志中(Relay Log);
2.3 备库读取中继日志中的事件,将其重放到备库数据之上;


0 0