MySQL主从同步原理

mysql主从复制用途

实时灾备,用于故障切换
读写分离,提供查询服务
备份,避免影响业务

主从部署必要条件

主库开启binlo日志(设置log-bin参数)
主从server-id不同
从库可以连同主库 

主从复制原理图

MySQL主从同步原理

从库的io线程

去请求主库的bin-log二进制,并将得到的binlog日志写到relay log(中继日志中)

主库的dump线程

用来给从库的I/O线程传送binlog二进制日志;

从库的SQL线程 

会读取从库中得relay-log文件的日志,并且解析成具体的操作进行持久化,实现主从同步

该架构存在的问题

主库宕机可能存在数据的丢失;当然从库也可能宕机,我们可以部署双从;
从库只有一个SQL线程,当用户操作过多时。
主库生成大量的bin--log二进制日志,从库可能帮不过来

我们使用的是MHA软件

MHA可以运行在每台mysql服务器上,当MHA检测到master出现故障时,
会将记录到最新数据的slave提升为新的master。
并将其他所有的slave重新指向新的master。
整个故障转移对程序来说是完全透明的

MHA缺点

在MHA自动切换故障的过程中,MHA试图向宕机的主服务器上记录二进制日志。
最大程度的保证数据不丢失,但这并不总是可行的。
例如,如果主服务器硬件故障或无法通过ssh访问。
MHA没法保存二进制日志,只进行故障转移而丢失了最新的数据。  

半同步复制

mysql半同步复制可以大大降低数据丢失的,MHA可以与半同步复制结合起来。
如果一台slave服务器接收到了最新的二进制日志。
HMA可以将最新的二进制日志同步给其他的slave。
因此可以保证所有节点数据的一致性

MHA工作原理总结为以下几条

•从宕机的master服务器上保存二进制事件
•识别含有最新数据的slave
•提升一个slave为新的master
•将其他的slave连接到新的maser进行复制

  

  

上一篇:js函数参数设置默认值


下一篇:Bash Shebang 小结