MySQL主从复制原理
主从复制(也称 AB 复制)将 MySQL主服务器 的数据 复制 到一个或多个 MySQL从服务器
主–从复制 的角色
主从复制中分为:
- 主服务器(主节点,master),增删改在主节点上进行
- 从服务器(从节点,slave),查询在一个或多个从节点上进行
可以提高写入性能,读取速度。
应用场景
- 负载均衡,提高性能。读写分离,主节点负责 增删改,从节点负责 查询
- 实时备份,用于故障切换
二进制日志 binlog
主节点需要开启 二进制日志 binlog,执行正删改时,都会记录到该日志中
主从复制过程
master主节点,将数据的改变记录 二进制 binlog日志
slave从节点,开启一个线程(I/O Thread),通过 mysql 协议,请求主节点的二进制日志文件中的事件
master主节点,启动一个线程(dump Thread),检查二进制日志binlog,跟对方请求的位置对比,如果不带请求位置参数,则主节点就会从第一个日志文件中的第一个事件发送给slave从节点。
slave从节点,接收到 master主节点 发送过来的数据,将其保存到中继日志(Relay log)文件中。并记录该次请求到主节点的具体哪一个二进制日志文件内部的哪一个位置(主节点中的二进制文件会有多个)。
slave从节点,启动另外一个线程(sql Thread ),把 Relay log 中的事件读取出来,并在本地再执行一次。
canal 工作原理
- canal 模拟 MySQL slave 的交互协议,伪装自己为 MySQL slave ,向 MySQL master 发送dump 协议
- MySQL master 收到 dump 请求,开始推送 binary log 给 slave (即 canal )
- canal 解析 binary log 对象(原始为 byte 流)