mysql最全复制整理---这一篇就够了

写在开头

今天在熟悉公司的环境的时候看到了目前还采用异步复制的方式,就有点好奇为什么不采用增强的半同步复制?所以自己就又去自习的总结了一下复制相关的内容。下面总结一些,只是一些大纲,具体的细节大家可以去Google具体的细节。

复制种类

1.异步复制,即正常的mysql默认复制方式,主库写完binlog直接返回成功,主挂掉可能会丢失数据。
2.半同步复制,即主库在写完binlog,至少写到一个从库的中继日志即可返回成功,相比于异步复制会更可靠,数据也会更加稳定,但是因为要等从库返回一个ack标志,所以响应会变慢,所以对于网络会有问题的业务不建议使用,另外备注一点,半同步复制可自动降级为异步复制。
3.全同步复制,即主库写完binlog同步到所有的从库中继日志之后,再返回成功,性能会更加慢,基本不建议使用。
4.并行复制,mysql5.7之前都是基于schema的,粒度非常粗,5.7引入基于group_commit方式,真正意义上的并行复制,可以去了解使用。
5.MGR复制,mysql5.7引入的mysql原生组复制,可以适用于金融行业,插件版。

半同步复制的方式

1.after_sync,5.7版本引入的增强半同步复制方式,5.7半同步复制默认使用方式。
流程原理如下:
master_commit—>master写binlog—>master同步slave写中继日志—>slave返回成功ack标志给master—>master收到slave ack标志写入engine—>客户端返回写入成功

2.after_commit,5.7之前默认的半同步复制方式。
流程原理图如下:
master_commit—>master写binlog—>master写入engine—>master同步slave写中继日志—>slave返回成功ack标志给master—>客户端返回写入成功。

3.对比,after_sync由于再收到slave ack标志后才返回成功,所以当主库挂掉之后,所有的事务都已经写到slave,所以不会丢失数据。

复制的底层方式

1.正常binlog文件+位点的方式。
2.GTID方式,个人建议使用GTID方式,因为切换方便,而且优点也很多,可以去深入了解。

你可能感兴趣的:(mysql,mysql)