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

    mysql主从同步过程:
    mysql的主从复制主要有三个线程:master:二进制日志转储线程(binlog dump thread)、slave:I/O线程(I/O thread)和SQL线程(SQL thread).master一条线程和slave中的两条线程。

    • 主节点binlog,主从复制的基础是主库将数据库的所有变更记录到binlog,实际上主从同步的原理就是基于binlog进行数据同步的。
    • 主节点二进制日志转储线程(log dump),当binlog有变动时,log dump线程读取其内容并发送给从节点
    • 从节点I/O线程,接受binlog内容(这里是数据更新的部分),并将其拷贝到本地形成中继日志(Relay log)
    • 从节点SQL线程读取relay log 文件内容对数据更新进行重放,最终保证主从数据库一致性。
      注:主节点使用binlog文件 + position偏移量来定义主从同步的位置,从节点会保存其已接受到的偏移量,如果从节点发生宕机重启,则会自动从position的位置发起同步

    由于mysql默认的复制方式是异步的,主库把日志发送给从库后不关心从库是否已经处理,这样会产生一个问题就是假设主库挂了,从库处理失败,这时候从库升级为主库后,日志就丢失了。

    全同步复制:主库写入binlog后强制同步日志到从库,所有的从库执行完成之后长才返回给客户端,但是这样性能就会收到严重影响。
    半同步复制:和全同步复制不同的是,半同步复制是从库写入日志成功返回ACK确认给主库,主库收到至少一个从库的确认就认为写操作完成。

  • 相关阅读:
    [Swift]LeetCode300. 最长上升子序列 | Longest Increasing Subsequence
    备忘录模式之C++实现
    leecode 题解 || Merge k Sorted Lists 问题
    数学三大危机
    singlefile.py
    Data Url生成工具之HTML5 FileReader实现
    算法题:打印1到最大的n位数
    java.lang.NoClassDefFoundError: org/apache/commons/lang/xwork/StringUtils
    hdu 1181 变形课
    postgis经常使用函数介绍(一)
  • 原文地址:https://www.cnblogs.com/liuzhidao/p/14805162.html
Copyright © 2011-2022 走看看