原理

MySQL(架构)[主从篇]

  • 第一步:对主库进行增删改操作。
  • 第二步:主库记录变更到日志中。
  • 第三步:从库有两个线程,一个是 I/O 线程,负责从主库的日志中读取变更,并写入自己的日志;另一个是 SQL 线程,负责读取从库日志中的变更,并写入从库。

常用方案

MySQL(架构)[主从篇]
一主三从是比较合理的部署方案,三台从库的作用分别是:读取、备份和替补。读取和备份很容易理解,读取从库为了应付大量的读操作,备份从库为了执行大量数据的备份工作。替补从库平时不做任何工作,只为了保证自己与主库的数据最接近,这样就可以尽可能的减少数据丢失。

切换从库为主库

在主从结构中,主库挂了,需要我们手动切换从库为主库。

  • 第一步:查看每台从库的日志文件,找出与主库最接近的从库。
    MySQL(架构)[主从篇]
  • 第二步:如果主库没有死透,把主库的日志同步到该从库,再同步到其它所有从库。
    MySQL(架构)[主从篇]
  • 第三步:切换该从库为主库。
    MySQL(架构)[主从篇]

主从结构的特点

主从结构可以实现读写分离,支持了高并发,可以满足单一实例的一切新能要求。但还存在以下两个问题:

  • 一致性

主库的完成了增删改操作,也记录了日志,但从库还没有把最新的日志取走,主库就挂了,这时会导致数据丢失。也就是说,用户的某些操作被抹去了,需要重新来过,但用户并不知道,因为主库已经执行完成,并告知用户已成功了,如果是信用卡还款,那这个倒霉的用户可能会稀里糊涂的被拉近黑名单。(可使用半同步复制解决)

  • 高可用

无法监测问题,主库挂了后,不能自动找到与主库数据最接近的从库,并把它切换为主库。(可使用 HMA 架构解决)

半同步复制

相关文章: