主从复制的几种方式
同步复制
所谓的同步复制,意思是 master 的变化,必须等待 slave-1,slave-2,…,slave-n 完成后才能返回。
这样,显然不可取,也不是 MYSQL 复制的默认设置。比如,在 WEB 前端页面上,用户增加了条记录,需要等待很长时间。
异步复制
如同 AJAX 请求一样。master 只需要完成自己的数据库操作即可。至于 slaves 是否收到二进制日志,是否完成操作,不用关心。MYSQL 的默认设置。
半同步复制
master 只保证 slaves 中的一个操作成功,就返回,其他 slave 不管。这个功能,是由 google 为 MYSQL 引入的。

当 master 的二进制日志每产生一个事件,都需要发往 slave,如果我们有 N 个 slave,那是发 N 次,还是只发一次?
如果只发一次,发给了 slave-1,那 slave-2,slave-3,…它们怎么办?
显然,应该发 N 次。实际上,在 MYSQL master 内部,维护 N 个线程,每一个线程负责将二进制日志文件发往对应的 slave。master 既要负责写操作,还的维护 N 个线程,负担会很重。可以这样,slave-1 是 master 的从,slave-1 又是 slave-2,slave-3,…的主,同时 slave-1 不再负责 select。slave-1 将 master 的复制线程的负担,转移到自己的身上。这就是所谓的多级复制的概念。