MySQL的三种复制方式

asynchronous 异步复制

fully synchronous 全同步复制

Semisynchronous 半同步复制

asynchronous replication

原理:在异步复制中,master写数据到binlog且sync,slave request binlog后写入relay-log并flush disk

优点:复制的性能最好

缺点:master挂掉后,slave可能会丢失事务

代表:MySQL原生的复制

fully synchronous replication

原理:在全同步复制中,master写数据到binlog且sync,所有slave request binlog后写入relay-log并flush disk,并且回放完日志且commit

优点:数据不会丢失

缺点:会阻塞master session,性能太差,非常依赖网络

代表:MySQL-Cluster

semisynchronous replication

普通的半同步复制

原理: 在半同步复制中,master写数据到binlog且sync,且commit,然后一直等待ACK。当至少一个slave request bilog后写入到relay-log并flush disk,就返回ack(不需要回放完日志)

优点:会有数据丢失风险(低)

缺点:会阻塞master session,性能差,非常依赖网络,

代表:after commit, 原生的半同步

重点:由于master是在三段提交的最后commit阶段完成后才等待,所以master的其他session是可以看到这个提交事务的,所以这时候master上的数据和slave不一致,master crash后,slave数据丢失

增强版的半同步复制(lossless replication)

原理: 在半同步复制中,master写数据到binlog且sync,然后一直等待ACK. 当至少一个slave request bilog后写入到relay-log并flush disk,就返回ack(不需要回放完日志)

优点:数据零丢失(前提是让其一直是lossless replication),性能好

缺点:会阻塞master session,非常依赖网络

代表:after sync, 原生的半同步

重点:由于master是在三段提交的第二阶段sync binlog完成后才等待, 所以master的其他session是看不见这个提交事务的,所以这时候master上的数据和slave一致,master crash后,slave没有丢失数据

重要参数

参数comment默认值推荐值是否动态

rpl_semi_sync_master_wait_for_slave_count

至少有N个slave接收到日志

1

1

dynamic

rpl_semi_sync_master_wait_point

等待的point

AFTER_SYNC

AFTER_SYNC

dynamic

rpl_semi_sync_master_timeout

切换复制的timeout

10000(10s)

1000(1s)

dynamic

rpl_semi_sync_master_enabled

是否开启半同步

OFF

ON

dynamic

rpl_semi_sync_slave_enabled

是否开启半同步

OFF

ON

dynamic

如何开启lossless replication

1

2

3

4

5

6

########semi sync replication settings########

plugin_dir=/usr/local/mysql/lib/plugin

plugin_load = "rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so"

loose_rpl_semi_sync_master_enabled = 1

loose_rpl_semi_sync_slave_enabled = 1

loose_rpl_semi_sync_master_timeout = 1000

实践是检验真理的唯一标准

如何检验上述after_sync,after_commit

如何检验上述原理的正确性

InnoDB commit : 三阶段提交过程

1

2

3

A阶段. wite prepare log -- 写入Xid

B阶段. write binlog

C阶段. write commit log

测试点

master上当一个事务Waiting for semi-sync ACK from slave的时候,后来的事务是在A,B,C哪个阶段卡住呢?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

0,RC模式

1. semi-sync C阶段等待

假设设置time-out=100000s,当事务一提交了一个大事务,在write commit log(C阶段)时候等待,

那么第二个事务在敲commit命令的时候,是卡在哪个阶段呢?是卡在 wite prepare log(A阶段)?还是write binlog(B阶段)?还是write commit log(C阶段)

测试:semi-sync vs loss-less semi-sync

【semi-sync】 C阶段等待

0, 开启事务1,然后在slave上执行stop slave,制造timeout的情况,让其阻塞。(Waiting for semi-sync ACK from slave)

1,在开启一个事务2,事务2插入一条特殊记录(XXXXX)。 (Waiting for semi-sync ACK from slave)

2,在开启一个事务3。

2.1,测试案例:这个时候,kill -9 mysqld,造成人为的mysql crash

3,假设卡在A阶段,那么事务3,肯定是看不到事务1,2写入的记录(XXXXX),且重启mysql后,事务2不会提交。

4,假设卡在C阶段,那么事务3,肯定是可以看见事务1,2写入的记录(XXXXX)。

经过测试:

1,是卡在C阶段,也就是说事务3是可以看见事务1,事务2的。

2,MySQL crash重启后,事务1,事务2的dml都已经提交成功,说明不是卡在A阶段

【loss-less semi-sync】B阶段等待

0, 开启事务1,然后在slave上执行stop slave,制造timeout的情况,让其阻塞。(Waiting for semi-sync ACK from slave)

1,在开启一个事务2,事务2插入一条特殊记录(XXXXX)。(Waiting for semi-sync ACK from slave)

2,在开启一个事务3

3,假设卡在A阶段,那么事务3,肯定是看不到事务1,2写入的记录(XXXXX),且重启mysql后,事务2不会提交。。

4,假设卡在B阶段,那么事务3,肯定是可以看见事务1,2写入的记录(XXXXX),且重启mysql后,事务1,2都会提交。。

5, 假设卡在C阶段,那么事务3,肯定是可以看见事务3写入的记录(XXXXX)。

经过测试:

1,是卡在B阶段,也就是说事务3,既看不见事务1的提交内容,也看不见事务2的提交内容,且重启mysql后,事务1,2都已经提交。。

2,MySQL crash重启后,事务1,事务2的dml都已经提交成功,说明不是卡在A阶段。

性能

semi-sync vs lossless semi-sync 的性能对比

根据以上的测试,可以得知,lossless只卡在B阶段,普通的semi-sync是卡在C阶段。

lossless的性能远远好于普通的semi-sync,即(after_sync 优于 after_commit)

因为lossless 卡在B阶段的时候可以堆积事务,可以在C阶段进行group commit。

普通的semi-sync,卡在C阶段,事务都已经commit了,并没有堆积的过程。

CAP理论

一致性【C】

可用性【A】

分区容忍性【P】

理论:CAP 三者不可兼得,必须要牺牲一个

分区,是一定存在的,不是你想不要就不要的。所以,这里只剩下两种组合

CP 牺牲可用性

这种做法,就是保留强一致性,牺牲可用性

案例:可以将rpl_semi_sync_master_timeout设置成一个无限大的值,比如:100天,那么master和slave就强一致了,但是可用性就大打折扣

AP 牺牲一致性

这种做法,就是保留高可用性,牺牲一致性

案例:比如原生的异步复制就是这样咯。可以快速做到切换,但是一致性就没有保障

mysql5.7无损复制_MySQL5.7新特性:lossless replication 无损复制相关推荐

  1. Oracle 11g新特性之 - 使用RMAN复制数据库

    Oracle 11g新特性之 - 使用RMAN复制数据库 Oracle 11g新特性之 - 使用RMAN复制数据库 - 1 Oracle 11g新特性之 - 使用RMAN复制数据库 - 2 Oracl ...

  2. MySQL5.7新特性:lossless replication 无损复制

    MySQL的三种复制方式 asynchronous 异步复制 fully synchronous 全同步复制 Semisynchronous 半同步复制 asynchronous replicatio ...

  3. mysql5.7.20新特_Mysql5.7新特性

    Mysql在被sun,继而被oracle收购之后,并没有被oracle这个巨人雪藏,反而近几年的发展速度极为之快,谁都知道,你oracle做不好mysql,开源的市场就会被别人取代,pg,MariaD ...

  4. mysql 数据库缓冲池_MySQL5.6新特性快速预热Buffer_Pool缓冲池

    在之前的版本里,如果一台高负荷的机器重启后,内存中大量的热数据被清空,此时就会重新从磁盘加载到Buffer_Pool缓冲池里,这样当高峰期间,性能就会变得很差,连接数就会很高. 在MySQL5.6里, ...

  5. java stream api 对象复制_Java 8新特性之旅:使用Stream API处理集合

    在这篇"Java 8新特性教程"系列文章中,我们会深入解释,并通过代码来展示,如何通过流来遍历集合,如何从集合和数组来创建流,以及怎么聚合流的值. 在之前的文章"遍历.过 ...

  6. mysql5.7 事件_MySQL 5.7新特性

    新增特性 Security improvements. MySQL.user表新增plugin列,且若某账户该字段值为空则账户不能使用.从低版本MySQL升级至MySQL5.7时要注意该问题,且建议D ...

  7. 关于Mysql5.7高版本group by新特性报错

    一个项目的开发到测试上线运营,团队对项目的管理不成熟会影响项目的开发效率.由于项目是我刚接手,独自在Centos搭建PHP环境,所以就考虑使用高版本,选择了Mysql5.7,本地开发环境还是Windo ...

  8. mysql 复制延迟诊断_新特性解读 | MySQL 8 复制延迟观测新方式,更全面更精准

    转载自公众号:玩转MySQL,作者:洪斌 一直以来 MySQL 复制延迟观测是不完善的,既无法观测到真实的主从延迟,也无法支持复杂的复制拓扑环境,常用的 second_behind_master 指标 ...

  9. mysql failover_新特性解读 | MySQL 8.0.22 新特性 Async Replication Auto failover

    作者:洪斌 爱可生南区负责人兼技术服务总监,MySQL  ACE,擅长数据库架构规划.故障诊断.性能优化分析,实践经验丰富,帮助各行业客户解决 MySQL 技术问题,为金融.运营商.互联网等行业客户提 ...

最新文章

  1. loj2058 「TJOI / HEOI2016」求和 NTT
  2. 想要确保架构目标达成?适合度函数了解一下
  3. LaTex中编辑公式的上下角标出现的问题---允许{}的嵌套吗?
  4. 剑指Offer(Java版):数值的整数次方
  5. 基于.Net的单点登录(SSO)解决方案
  6. 【学术相关】谈谈国自然申请中标的经验
  7. 这应该是目前最快速有效的ASP.NET Core学习方式(视频)
  8. 4.RabbitMQ 4种交换模式
  9. python find函数_Python 速学!不懂怎么入门python的小白看这篇就够了!
  10. 中间介(MiddleWare)
  11. java代码查询索引文件实例_关于使用pdfbox的对PDF文件通过lucene生成索引文件IndexPDFFiles类代码示例...
  12. 凉了!张三同学没答好,熬夜整理最新大厂Java高频面试题
  13. 全网首发:sqlite-jdbc在UOS上弹窗提示的解决办法
  14. 华为主题引擎怎么下载_华为主题动态引擎
  15. 模仿QQ空间 网页设计
  16. python wheel是什么意思_python中wheel指的是什么
  17. 企业邮局和邮件服务器
  18. 液化气瓶爆炸总发生,要为监管敲警钟
  19. 小秘谈币:谈谈炒币的几点感悟
  20. 对话《财富》40U40|闪马智能创始人兼CEO彭垚:人口、变局与下一代智慧系统

热门文章

  1. vue2.0 使用 swiper 实现PC端卡片左右虚拟slides滑动
  2. JESD22-A103E.01:2021 High Temperature Storage Life, 高温贮存寿命规范标准 , 最新版2021年刚刚发行
  3. python按某列拆分excel表格_把一张Excel表按照固定列分成不同工作薄的小白方法...
  4. Modern PHP读书笔记一
  5. 孤尽训练营打卡日记day28--第四周总结
  6. 平方度用计算机打出来,角度计算器-角度计算器
  7. 校招选择题汇总【图形推理(1)】含答案解析
  8. 分享:用Python语言轻松实现二代身份证阅读器(读卡器)自动读卡,支持定制开发
  9. openjudge 7920 统计单词数
  10. 投稿经验分享之三:干货| 如何找寻合适的投稿期刊?