为什么搭建主从复制

  1. 一主一从,一主多从。主节点写数据,从节点读数据。为了保证高可用。

image.png

  1. 读写分离主要是用来抗请求,将写请求落到主库,读请求分散到从库。主库宕机的话,可以将从库切换为主库,保证高可用。
  2. 主从复制基本原理。mysql在执行增删改查的时候会将操作记录到binlog日志中。从库有IO线程,负责跟主库建立TCP链接,接着请求主库传输binlog日志给自己,主库有一个IO dump线程,通过dump线程将binlog传给从库的IO线程
  3. 。从库的IO线程会将读取到的binlog日志数据写入到自己本地的relay日志文件中,然后从库有另一个SQL线程会读取relay日志内容,进行日志重新,在从库上执行一遍主库的操作。

    主从复制

  4. 异步复制:再系统无人用的时候停掉主库,拷贝backup.sql文件,在从库上执行一遍。设置,让在主库上新增的数据同步到从库,但是这种情况会出现短暂不一致的问题。

  5. 半同步复制:主库写入数据,起码确保binlog日志复制到从库了,再告诉客户端本次写入事务成功了。保证主库突然崩了,之前写入成功的数据的binlog日志都到从库了。
  6. mysql5.7默认方式:主库日志写入binlog,并且复制给从库,等待从库响应,从库返回成功给主库,主库再提交事务,再返回提交事务成功的响应给客户端。

    主从复制中的数据延迟问题

  7. 因为主库是多线程并发写入,从库是单线程拉取数据,所以可能会导致从库复制数据比较慢,会导致主库写入一条数据,从库缺查不到。所以应该尽可能的缩短主从同步的延迟事件,mysql5.7已经支持并行复制了,在从库设置slave_parallel_workers>0,然后slave_parallel_type设置为LOGICAL_CLOCK.