Mysql-主从同步原理


  • Replication 线程

  1. master与slave之间实现整个复制过程主要由三个线程完成:两个(SQL线程和IO线程)在slave端,一个(IO线程)在master端。
  2. 要实现MySQL的replication,必须打开master端的Binary Log(mysql-bin.xxx)功能。
  3. 整个复制过程实际上就是slave从master端获取日志然后在自己身上顺序执行日志中记录的各种操作。
  • 复制基本过程(异步的)

  1. slave上的IO线程连接master,请求从指定日志文件的指定位置(或者从最开始)之后的日志内容。
  2. master收到请求,负责复制的IO根据请求信息读取指定的日志,并返回(日志文件的地址也返回,方便下次直接根据地址请求)
  3. slave的IO收到信息后,将日志内容依次写入到slave端的relay log文件的最末端,存master日志文件的地址。
  4. slave的SQL线程检测到Relay Log中新加内容后,马上解析该Log文件的内容(Query语句),从而能保证两端的数据是一样的。
  • MySQL半同步模式

  1. 在这种模式下:master会等到binlog成功传送并写入至少一个slave的relay log之后才会提交,否则一直等待,直到timeout(默认10s)。当出现timeout的时候,master会自动切换半同步为异步,直到至少有一个slave成功收到并发送Acknowledge,master会再切换回半同步模式。结合这个新功能,我们可以做到,在允许损失一定的事务吞吐量的前提下来保证同步数据的绝对安全,因为当你设置timeout为一个足够大的值的情况下,任何提交的数据都会安全抵达slave。

  目录