MySQL的主从同步机制

MySQL主从复制类型

  • 异步复制:主库将binlog事件异步发送给从库,从库根据事件进行回放。
  • 半同步复制:主库等待至少一个从库确认接收到数据,然后返回确认给客户端。
  • 同步复制:主库等待所有从库确认接收到数据,然后返回确认给客户端。

异步复制

异步复制是MySQL默认的复制类型

主库:

  • 接收到提交事务请求
  • 更新数据
  • 将数据写入binlog
  • 给客户端响应
  • 主库推送binlog变更事件到从库
  • 从库接收到事件去主库拉取数据

从库:

  • 由IO线程将同步过来的binlog写入relay log中
  • 由SQL线程从relay log重放事件,更新数据
  • 给主库返回响应

简单来说就是:主库提交事务会写binlog,主库dump线程会监听binlog日志的变更,如果binlog有更新则推送更新事件给从库,
从库接收到事件后拉取数据,会有一个IO线程将其写入到relay log中,从库再慢慢消化,由sql线程重放更新数据

但是异步复制由数据丢失风险。
比如:数据还没同步到从库,主库就给客户端响应,然后主库挂了,此时从库晋升为主库的话,数据就会丢失。