Mysql主从复制&半同步复制原理

一、Mysql主从复制原理

MySQL主从复制实则是一个异步复制的过程。经历了三个线程:主库和从库上的I/O线程,SQL线程。

Mysql主从复制&半同步复制原理
MySQL的主从复制,实际上Slave端获取到Master端binlog日志(记录了SQL数据操作,增删添,不记录查询语句),将信息存放到relay中触发SQL线程进行还原的一个过程。

主从复制要点:

  • 主库开启binlog
  • 主库建立用户,给从库授权认证
  • 从库配置master.info(CHANGE MASTER TO 建立连接)
  • 复制开关:start slave
  • 作为复制的所有MySQL节点的server-id都不能相同(0 < server-id < 2^23-1)
    Mysql主从复制&半同步复制原理

如果主库突然宕机了,会造成数据丢失,那么怎么解决这个问题呢?

这时候半同步复制的优势就发挥出来了。

二、半同步复制

介于异步复制和全同步复制之间,主库在执行完客户端提交的事务后不是立刻返回给客户端,而是等待至少一个从库接收到并写到relay log中才返回给客户端。相对于异步复制,半同步复制提高了数据的安全性,同时它也造成了一定程度的延迟,这个延迟最少是一个TCP/IP往返的时间。

Mysql主从复制&半同步复制原理

事物在主库执行完binlog后接受到从库的ACK,才会回复客户端。所以,相比而言,性能有所降低。

半同步复制特点:

  • 确保事务提交后binlog至少传输到一个从库
  • 不保证从库应用完成这个事务的binlog
  • 网络异常或从库宕机,卡主库,直到超时或从库恢复