介绍,复制的类型、原理。
一、复制(同步)
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数据库中用的少,但是技术地位高,是后起之秀的基础
Comments | NOTHING