位置: 编程技术 - 正文

简单谈谈MySQL的半同步复制(简述mysql的优势)

编辑:rootadmin

推荐整理分享简单谈谈MySQL的半同步复制(简述mysql的优势),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:简述mysql,mysql的基本介绍,1.mysql,mysql的认识,简述mysql的概念及作用,mysql的概述,简述mysql的概念及作用,简述mysql,内容如对您有帮助,希望把文章链接给更多的朋友!

简介

MySQL通过复制(Replication)实现存储系统的高可用。目前,MySQL支持的复制方式有:

异步复制(Asynchronous Replication):原理最简单,性能最好。但是主备之间数据不一致的概率很大。 半同步复制(Semi-synchronous Replication):相比异步复制,半同步复制牺牲了一定的性能,提升了主备之间数据的一致性(有一些情况还是会出现主备数据不一致)。 组复制(Group Replication):基于Paxos算法实现分布式数据复制的强一致性。只要大多数机器存活就能保证系统可用。相比半同步复制,Group Replication的数据一致性和系统可用性更高。

本文主要讨论MySQL半同步复制。

半同步复制的基本流程

MySQL半同步复制的实现是建立在MySQL异步复制的基础上的。MySQL支持两种略有不同的半同步复制:AFTER_SYNC和AFTER_COMMIT(受rpl_semi_sync_master_wait_wait_point控制)。

开启半同步复制时,Master在返回之前会等待Slave的响应或超时。当Slave超时时,半同步复制退化成异步复制。这也是MySQL半同步复制存在的一个问题。本文不讨论Salve超时的情形(不讨论异步复制)。

半同步复制AFTER_SYNC模式的基本流程

AFTER_SYNC模式是MySQL 5.7才支持的半同步复制方式,也是MySQL5.7默认的半同步复制方式:

Prepare the transaction in the storage engine(s). Write the transaction to the binlog, flush the binlog to disk. Wait for at least one slave to acknowledge the reception for the binlog events for the transaction. Commit the transaction to the storage engine(s).

半同步复制AFTER_COMMIT模式的基本流程

MySQL 5.5和5.6的半同步复制只支持AFTER_COMMIT:

Prepare the transaction in the storage engine(s). Write the transaction to the binlog, flush the binlog to disk. Commit the transaction to the storage engine(s). Wait for at least one slave to acknowledge the reception for the binlog events for the transaction.

AFTER_SYNC和AFTER_COMMIT两种方式的小结

AFTER_SYNC: 日志复制到Slave之后,Master再commit。所有在master上commit的事务都已经复制到slave。所有已经复制到slave的事务在master不一定commit了(比如,master将日志复制到slave之后,在commit之前宕机了)

AFTER_COMMIT:Master commit之后再将日志复制到Slave。所有master上commit的事务不一定复制到slave。(比如,master commit之后,还没来得及将日志复制到slave就宕机了)所有已经复制到slave的事务在master上一定commit了。很明显,AFTER_COMMIT在master宕机的情况下,无法保证数据的一致性(master commit之后,还没来得及将日志复制到slave就宕机了)。本文接下来只讨论AFTER_SYNC模式。MySQL5.7.3开始支持配置半同步复制等待Slave应答的个数:rpl_semi_sync_master_wait_slave_count 。

AFTER_SYNC模式下的异常情况分析

异常情况1:master宕机后,主备切换。

master执行事务T,在将事务T的binlog刷到硬盘之前,master发生宕机。slave升级为master。master重启后,crash recovery会对事务T进行回滚。主备数据一致。

master执行事务T,在将事务T的binlog刷到硬盘之后,收到slave的ACK之前,master发生宕机(存在pendinglog)。slave升级为master。

2.1 slave还没有收到事务T的binlog,master重启后,crash recovery会直接提交pendinglog。主备数据不一致。

2.2 slave已经收到事务T的binlog。主备数据一致。

简单谈谈MySQL的半同步复制(简述mysql的优势)

异常情况2:master宕机后,不切换主机。只需考虑异常情况1中的2.1。

master重启后,直接提交pendinglog,此时,主备数据不一致:

slave连接上master,通过异步复制的方式获得事务T的binlog。主备数据一致。slave还没来得及复制事务T的binlog,如果master又发生宕机,磁盘损坏。主备数据不一致,事务T的数据丢失。异常情况处理

从上面异常情况的简单分析我们得知,半同步复制需要处理master宕机后重启存在pendinglog(slave没有应答的binlog)的特殊情况。

针对master宕机后,不进行主备切换的情形:

在crash recovery之后,master等到slave的连接和复制,直到至少有一个slave复制了所有已提交的事务的binlog。(SHOW MASTER STATUS on master and SELECT master_pos_wait() on slave)。

针对master宕机后,进行主备切换的情形:

旧master重启后,在crash recovery时,对pendinglog进行回滚。(人工截断master的binlog未复制的部分?)

思考

为什么master重启之后,crash recovery的过程中,是直接commit pendinglog,而不是重试请求slave的应答呢?

MySQL的异步复制和半同步复制都是由slave触发的,slave主动去连接master同步binlog。

没有发生主备切换,机器重启后无法知道哪台机器是slave。如果发生主备切换,它已经不是master了,则不会再有slave连上来。如果继续等待,则无法正常运行。

总结

MySQL半同步复制存在以下问题:

当Slave超时时,会退化成异步复制。 当Master宕机时,数据一致性无法保证,需要人工处理。 复制是串行的。

正因为MySQL在主备数据一致性存在着这些问题,影响了互联网业务7*的高可用服务,因此各大公司纷纷祭出自己的“补丁”:腾讯的TDSQL、微信的PhxSQL、阿里的AliSQL、网易的InnoSQL。

MySQL官方已经在MySQL5.7推出新的复制模式——MySQL Group Replication。

参考文献

MySQL半同步复制的数据一致性探讨

MySQL High Availability Solutions

Loss-less Semi-Synchronous Replication on MySQL 5.7.2

Enhanced semisync replication

RedHat6.5安装MySQL5.7教程详解 RedHat6.5安装MySQL5.7教程分享,供大家参考,具体内容如下安装环境:RedHat6.5第一步:下载下载MySQL5.7:

MySQL5.7主从配置实例解析 MySQL5.7主从配置实现方法,具体内容如下安装环境:Master:...,Redhat6.5,MySQL5.7.Slave:...,Redhat6.5,MySQL5.7.Master的my.cnf配置:Slave的my.cnf

mysql 5.7. winx安装配置教程 今天又一次的在电脑上装MySQL数据库。每次重装系统,都要重装一下数据库,但是每次都要百度参考一下百度上安装配置教程。于是决定自己没事时也写

标签: 简述mysql的优势

本文链接地址:https://www.jiuchutong.com/biancheng/350080.html 转载请保留说明!

上一篇:mysql 5.7.17 安装图文教程(windows)(mysql5717安装及配置超详细教程)

下一篇:RedHat6.5安装MySQL5.7教程详解(redhat6.5安装图形界面)

  • 税务局核定税种是什么意思
  • 汇兑损益一般是多少
  • 开票资料银行必须填写吗
  • 个人所得税申报错误如何更正申报
  • 人员工资成本占收入多少合适,占总成本多少合适
  • 房地产企业销售额排名
  • 应纳税调增调减会计分录
  • 预付房租租金如何做账
  • 盈余公积多计提对报表的影响
  • 通行费进项抵扣条件
  • 车间设备维修费计入制造费用吗
  • 旅行社开具发票
  • 不属于抵扣范围的是什么
  • 净利润亏损怎么结转
  • 小规模免征增值税政策
  • 劳务分包可以开劳务费吗
  • 预付账款供应商类别怎么填
  • 无法连接到移动网络小米
  • 羊毛衫变形了还能变回来吗
  • 上一年度会计科目错误怎么更正
  • 固定资产和低值易耗品的登记和管理咋弄?
  • 分红率与股息率有啥区别
  • 国地税合并有什么角度写论文
  • 金融企业风险资产处理相关税收政策
  • 购车人丢失发票怎么查
  • 玩的最多的手机网游
  • php教程100
  • 会计期初余额和期末余额计算公式
  • pytorch如何搭建神经网络
  • vue-cli2.0
  • elementui怎么样
  • PHP Ajax JavaScript Json获取天气信息实现代码
  • 企业付检测费的会计科目
  • 增值税系统技术维护费抵扣只能当月申报
  • 办理完税证明需要什么资料
  • vuecli怎么使用自定义组件
  • 合并报表为什么要抵消子公司所有者权益
  • Spring(十五):Spring整合MyBatis的两种方式
  • 运用java解决的实际问题
  • mysql查询或
  • 运费发票有普票吗
  • 土地无形资产摊销年限多少年
  • 自然人独资公司可以变更法人吗
  • 已抵扣的发票冲红会计分录
  • 经营许可证需要多久时间
  • 劳务外包收入如何纳税
  • 企业的其他应付款
  • 高新企业奖励金怎么开票
  • 2021年购买土地需要缴纳什么税
  • 持有至到期投资减值准备可以转回吗
  • 企业应收票据到期怎么办
  • 确认收入时,也必须确认资产或债务
  • 建筑公司挂靠单位的财务处理是?
  • 融资租赁收到的租金计入什么科目
  • 应补税额是要交钱
  • 企业主营业务收入分录
  • 销售产品产生的运输费计入什么科目
  • 为什么设置辅警
  • 公益捐赠仪式流程
  • sql中分页
  • mysql5.7.20安装
  • sql Set IDENTITY_INSERT的用法
  • mysql基本sql语句大全(基础用语篇)
  • mac如何用u盘安装win10
  • NkbMonitor.exe - NkbMonitor是什么进程文件 有什么作用
  • linux who am i
  • win7系统本地连接图标不见了
  • win10 固态
  • Extjs Ext.MessageBox.confirm 确认对话框详解
  • jquery上传图片并预览
  • 如何用python连接数据库
  • 湖北省税务稽查局领导班子名单
  • 湖南省电子税务局登录
  • 2023年新农合缴费
  • 如何建立守信联系
  • 2020宜兴市民中心营业时间
  • 黄金消费税如何缴纳
  • 国税地税征管体制改革方案
  • 山东省地方税务局公告2018年第6号
  • 增值税发票打印机怎么调整打印位置
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设