zoukankan      html  css  js  c++  java
  • MySQL主从同步原理

    mysql主从复制用途

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

    主从部署必要条件

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

    主从复制原理图

    从库的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进行复制
    

      

      

  • 相关阅读:
    网页、JavaScript 数据类型
    网页javascript
    网页CSS
    使用ButterKnife无法inject view的解决办法
    项目管理实践 -- 健身小管家(Fitness housekeeper)的管理
    XML的序列化与反序列化
    JAVA虚拟机JVM-7.多线程常见问题刨析
    JAVA虚拟机JVM-6.锁优化
    JAVA虚拟机JVM-5.多线程以及锁
    JAVA虚拟机JVM-4.线程模型
  • 原文地址:https://www.cnblogs.com/charon2/p/10336179.html
Copyright © 2011-2022 走看看