异步复制(Asynchronous replication),MySQL默认的复制是异步的,主库在执行完客户端提交的事务后会当即将结果返给给客户端,并不关心从库是否已经接收并处理。原理最简单,性能最好,可是主从之间数据不一致的几率很大。安全
全同步复制(Fully synchronous replication),指当主库执行完一个事务,全部的从库都执行了该事务才返回给客户端。由于须要等待全部从库执行完该事务才能返回,因此全同步复制的性能必然会收到严重的影响。异步
半同步复制(Semisynchronous replication),介于异步复制和全同步复制之间,主库在执行完客户端提交的事务后不是马上返回给客户端,而是等待至少一个从库接收到并写到relay log中才返回给客户端。相对于异步复制,半同步复制牺牲了必定的性能,提升了数据的安全性。性能
默认状况下,MySQL的主从复制是异步的,异步复制能够提供最佳的性能, 主库把binlog日志发送给从库,而后将结果返回给客户端,并不会验证从库是否接收完毕。这也就意味着有可能出现当主库或从库发生故障的时候,从库没有接收到主库发送过来的binlog日志,致使主库和从库的数据不一致,甚至在恢复时形成数据的丢失。spa
为了解决上述出现的问题,MySQL 5.5 引入了一种半同步复制模式。该模式能够确保从库接收完主库发送的binlog日志文件并写入到本身的中继日志relay log里,而后会给主库一个反馈,告诉主库已经接收完毕,这时主库才返回结果给客户端告知操做完成。当出现从库响应超时状况时,主库会暂时切换到异步复制模式,直到下一次同步没有超时转为半同步复制为止。(master的dump线程除了发送binlog数据到slave,还承担了接收slave的ack工做。若是出现异常,没有收到ack,那么将自动降为普通的异步复制,直到异常修复)线程