MySQL 同步方式

梦莱2年前技术文章839

同步方式

一、分类

同步大致为异步、半同步、增强版同步、全同步;

二、详情

1.异步复制

MySQL 默认的复制策略,Master处理事务过程中,将其写入Binlog就会通知Dump thread线程处理,然后完成事务的提交,不会关心是否成功发送到任意一个slave中。 

问题:一旦Master 崩溃,发送主从切换将会发送数据不一致性的风险,但相对来讲性能最好。

2.半同步复制

Master处理事务过程中,提交完事务后,必须等至少一个Slave将收到的binlog写入relay log返回ack才能继续执行处理用户的事务。 

相关配置:

rpl_semi_sync_master_wait_point = AFTER_COMMIT

参数意义:什么时间点开始等ack;注意:这里MySQL 5.5并没有这个配置,MySQL5.7 为了解决半同步的问题而设置的

rpl_semi_sync_master_wait_for_slave_count = 1

参数意义:最低必须收到多少个slave的ack

rpl_semi_sync_master_timeout = 100

参数意义:等待ack的超时时间

问题:一旦Ack超时,将退化为异步复制模式,那么异步复制的问题也将发生;性能下降,增多至少一个RTT时间。

数据不一致性问题,因为等待ACK的点是Commit之后,此时Master已经完成数据变更,用户已经可以看到最新数据,当Binlog还未同步到Slave时,发生主从切换,那么此时从库是没有这个最新数据的,用户又看到老数据。

3.增强半同步

增强半同步和半同步不同是等待ACK时间不同。 

rpl_semi_sync_master_wait_point = AFTER_SYNC

半同步和增强半同步配置区别

半同步的问题是因为等待ACK的点是Commit之后,此时Master已经完成数据变更,用户已经可以看到最新数据,当Binlog还未同步到Slave时,发生主从切换,那么此时从库是没有这个最新数据的,用户又看到老数据。增强半同步将等待ACK的点放在提交Commit之前,此时数据还未被提交,外界看不到数据变更,此时如果发送主从切换,新库依然还是老数据,不存在数据不一致的问题。

问题:一旦Ack超时,将退化为异步复制模式,那么异步复制的问题也将发生;性能下降,增多至少一个RTT时间。如果超时时间设置很大,然后因为网络原来长时间收不到ACK,用户提交是被挂起的,可用性收到打击(半同步一样存在)

4.全同步

mysql全同步复制是指,当主库提交事务的binlog后,所有的从库节点必须全部收到事务并且apply并且提交这些内容之后,即io_thread和sql_thread完成所有binlog变化的接受的应用执行,主库的线程才可以继续进行后续操作,但是缺点是,主库完成一个事务的时间会被拉长,性能急剧降低。


相关文章

Hive合并小文件:hive归档(archive)

Hive合并小文件:hive归档(archive)

一、概述       在HDFS中数据和元数据分别由DataNode和NameNode负责,这些元数据每个对象一般占用大约150个字节。大量的小文件相对于大文件会占用大量的NameNode内存。对Na...

 MySQL优化器特性(九)行数评估

MySQL优化器特性(九)行数评估

查询的行数在成本计算中起了很重要的作用:1、row_evaluate_cost和行数直接相关2、需要访问多少索引页面,和行数直接相关。根据页面大小和平均索引条目长度计算每个索引页面的记录数,根据记录数...

数仓主流架构简介之一

数仓主流架构简介之一

一、Lambda架构Apache Storm的创建者Nathan Marz于 2011 年开发,旨在解决大规模实时数据处理的挑战。Lambda数据架构提供了一个可扩展、容错且灵活的系统来处理大量数据。...

 大数据集群监控配置操作指导(三)Flink监控开启jmx

大数据集群监控配置操作指导(三)Flink监控开启jmx

官网的关于 flnk+prometheus的文章https://flink.apache.org/features/2019/03/11/prometheus-monitoring.htmlprome...

StorageClass(NFS)

StorageClass(NFS)

一、什么是StorageClassKubernetes提供了一套可以自动创建PV的机制,即:Dynamic Provisioning.而这个机制的核心在于:StorageClass这个API对象.St...

MySQL性能优化(七)优化or查询的另一个例子

MySQL性能优化(七)优化or查询的另一个例子

优化or查询的另外一个例子。一个例子SELECT msg.msg_id, msg.content , … FROM msg   ...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。