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 备库读取中继日志中的事件,将其
重放到备库数据
之上;