24 | MySQL是怎么保证主备一致的?

MySQL 主备的基本原理

在这里插入图片描述
内部流程
在这里插入图片描述
备库 B 跟主库 A 之间维持了一个长连接。主库 A 内部有一个线程,专门用于服务备库 B 的这个长连接。一个事务日志同步的完整过程是这样的:

  1. 在备库 B 上通过 change master 命令,设置主库 A 的 IP、端口、用户名、密码,以及要从哪个位置开始请求binlog,这个位置包含文件名和日志偏移量。
  2. 在备库 B 上执行 start slave 命令,这时候备库会启动两个线程,就是图中的 io_thread 和
    sql_thread。其中 io_thread 负责与主库建立连接。
  3. 主库 A 校验完用户名、密码后,开始按照备库 B 传过来的位置,从本地读取 binlog,发给 B。
  4. 备库 B 拿到 binlog 后,写到本地文件,称为中转日志(relay log)。
  5. sql_thread 读取中转日志,解析出日志里的命令,并执行。

binlog 的三种格式对比

binlog 有两种格式,一种是 statement,一种是 row。可能你在其他资料上还会看到有第三种格式,叫作 mixed,其实它就是前两种格式的混合。</

相关推荐

  1. 25 | MySQL怎么保证高可用

    2024-05-13 01:02:02       15 阅读
  2. MySQL一行记录怎么存储

    2024-05-13 01:02:02       7 阅读
  3. MySQL深入——17(延迟)

    2024-05-13 01:02:02       30 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-05-13 01:02:02       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-05-13 01:02:02       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-05-13 01:02:02       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-05-13 01:02:02       18 阅读

热门阅读

  1. 邦芒面试:面试时如何有效发挥口才

    2024-05-13 01:02:02       7 阅读
  2. 从零手写实现 tomcat-05-servlet 处理支持

    2024-05-13 01:02:02       9 阅读
  3. Python3 笔记:负数的二进制

    2024-05-13 01:02:02       8 阅读
  4. redhat yum源配置

    2024-05-13 01:02:02       11 阅读
  5. Qt 实现TCP 协议的断开重连

    2024-05-13 01:02:02       12 阅读