9.2 复制有哪些类型



介绍,复制的类型、原理。

一、复制(同步)

1.1 复制的原理:主从复制,binlog传送(图)

下面左右两个MySQL数据库,是分别安装在两个不同的服务器上的:

  • 左边:Master,主库。dump_thread备份数据的线程
  • 右边:Slave,从库(备库)。

    • io_thread跟外部做数据交互的线程;
    • sql_thread执行sql的线程

数据库,在更新操作时,如果打开了binlog功能,就会有binlog产生。

relay:

《电工学》继电器;接力、中继

relay log:

中继日志

1.2 复制的类型

基于上述原理,具体的细节有少许不同:

1.3 异步复制 Asynchronous Replication

1.一主两备:客户端执行完sql语句,产生binlog,就立马去提交;不关心binlog日志是否成功抵达备库

  • source:主库。客户端执行一个sql语句,产生binlog,最后提交。客户端认为:执行完毕,它不关心binlog日志是否成功到达了备库。
  • replica 1:集群的复制节点:备库1.
  • replica 2:集群的复制节点:备库2.

  • 注意:上述区分了主从身份,也就是说:从库都是只读状态,不能进行更新操作,即不能执行事务。

2.特点:binlog是否真正抵达了备库,易丢失数据

  • 不足:因为没有一个反馈机制,不知道binlog是否真正的抵达了备库,导致容易丢失数据。

1.4 半同步复制 Semisynchronous Replication(重)

用的比较多。

1.一主两备:客户端执行完sql语句,产生binlog日志,当binlog日志成功抵达备库变成了中继日志relay log时,你通知反馈给我。我才去提交。

基于上节异步复制的不足,所以诞生了半同步复制 Semisynchronous Replication:
客户端执行、产生binlog、提交,跟上节相同。

主库:好吧,那我关心一下:等你们从库成功的收到了我的binlog,变成了中继日志relay log时,你再通知我。后续的从库上的执行,我就不关心了。

  • 注意:上述区分了主从身份,也就是说:从库都是只读状态,不能进行更新操作,即不能执行事务

2.特点:设置超时参数,防止主库永远等待备库、无法自己提交

  • 设置超时参数的必要性:万一,主备复制,突然短线了呢?比如光缆被挖掘机挖断了,比如从库意外挂了。客户端在主库上的提交,是不是就永远等待、永远提交不上去了?

​ 默认设置参数为10秒。主库:我就等你10秒,10秒内最好能通知我;如果10秒后 还没通知我,那么我就自己走了,不等你了、也不管你了,退化为异步复制。

1.5 组复制 Group Replication:

1.三个成员,不分主从

以前是一主两备,现在是三个成员,地位相等,没有主从之分。

  • Consensus:共识机制。即:1号库,要执行事务之前,也要把sql分发给其他节点一份,即要经过其他节点的同意。同意后,大家一块执行。--------- 强一致性
  • 注意:上节的两个复制类型,从库都是只读状态,不能进行更新操作即不能执行事务。现在,组复制的类型,都可以执行事务,因为前提已经说了不分主从身份了。

2.特点:有点像全同步

  • 虽然该复制类型,在MySQL数据库中用的少,但是技术地位高,是后起之秀的基础

二、小结

声明:Jerry's Blog|版权所有,违者必究|如未注明,均为原创|本网站采用BY-NC-SA协议进行授权

转载:转载请注明原文链接 - 9.2 复制有哪些类型


Follow excellence, and success will chase you.