Mysql主从复制&半同步复制原理
一、Mysql主从复制原理
MySQL主从复制实则是一个异步复制的过程。经历了三个线程:主库和从库上的I/O线程,SQL线程。
MySQL的主从复制,实际上Slave端获取到Master端binlog日志(记录了SQL数据操作,增删添,不记录查询语句),将信息存放到relay中触发SQL线程进行还原的一个过程。
主从复制要点:
- 主库开启binlog
- 主库建立用户,给从库授权认证
- 从库配置master.info(CHANGE MASTER TO 建立连接)
- 复制开关:start slave
- 作为复制的所有MySQL节点的server-id都不能相同(0 < server-id < 2^23-1)
如果主库突然宕机了,会造成数据丢失,那么怎么解决这个问题呢?
这时候半同步复制的优势就发挥出来了。
二、半同步复制
介于异步复制和全同步复制之间,主库在执行完客户端提交的事务后不是立刻返回给客户端,而是等待至少一个从库接收到并写到relay log中才返回给客户端。相对于异步复制,半同步复制提高了数据的安全性,同时它也造成了一定程度的延迟,这个延迟最少是一个TCP/IP往返的时间。
事物在主库执行完binlog后接受到从库的ACK,才会回复客户端。所以,相比而言,性能有所降低。
半同步复制特点:
- 确保事务提交后binlog至少传输到一个从库
- 不保证从库应用完成这个事务的binlog
- 网络异常或从库宕机,卡主库,直到超时或从库恢复