解决数据可靠性的问题需要主从同步,解决MySQL服务高可用需要主从同步,应对高并发还需要主从同步。

MySQL主从同步时,还有些问题需要思考。

  1. 为什么节点故障会影响主节点
  2. 为什么主从切换之后会丢数据
  3. 为什么明明没有更新数据,客户端读取到的数据是变来变去的。

这些都和主从同步的配置有关系。

如何配置MySQL的主从同步

当客户端提交一个事务到MySQL集群中,在客户端收到响应前,会有很多操作:

  1. 主库需要提交事务
  2. 更新存储引擎中的数据
  3. 把BinLog写到磁盘上
  4. 给客户端返回响应
  5. 把BinLog复制到从库
  6. 把BinLog写到暂存日志中
  7. 回放BinLog
  8. 更新存储引擎中的数据
  9. 给主库返回复制成功的响应

这些此操作的先后顺序很重要。由于时序不同,对应用程序来说,有很大差异。

比如先复制BinLog,等到BinLog到从节点之后,主节点再去提交事务。这种情况下,BinLog和主节点是同步的,任何请求下,主节点宕机也不会丢数据。