原创作者: 田帅萌

MySQL 8.0.14版本增加了一个新特性:MGR读写一致性;有了此特性,“妈妈”再也不用担心读MGR非写节点数据会产生不一致啦。

有同学会疑问:“MGR不是'全同步'么,也会产生读写不一致?”,在此肯定的告诉大家MGR会产生读写不一致,原因如下:

MGR相对于半同步复制,在relay log前增加了冲突检查协调,但是binlog回放仍然可能延时,也就是跟我们熟悉的半同步复制存在io线程的回放延迟情况类似。当然关于IO线程回放慢的原因,跟半同步也类似,比如大事务!!

所以MGR并不是全同步方案,关于如何处理一致性读写的问题,MySQL 在8.0.14版本中加入了“读写一致性”特性,并引入了参数:**group_replication_consistenc,**下面将对读写一致性的相关参数及不同应用场景进行详细说明。

参数group_replication_consistenc的说明

可选配置值

EVENTUAL 默认值,开启该级别的事务(T2),事务执行前不会等待先序事务(T1)的回放完成,也不会影响后序事务等待该事务回放完成。

**BEFORE **开启了该级别的事务(T2),在开始前首先要等待先序事务(T1)的回放完成,确保此事务将在最新的数据上执行。

**AFTER,**开启该级别的事务(T1),只有等该事务回放完成。其他后序事务(T2)才开始执行,这样所有后序事务都会读取包含其更改的数据库状态,而不管它们在哪个成员上执行。

**BEFORE_AND_AFTER **开启该级别等事务(T2),需要等待前序事务的回放完成(T1);同时后序事务(T3)等待该事务的回放完成;

**BEFORE_ON_PRIMARY_FAILOVER,**在发生切换时,连到新主的事务会被阻塞,等待先序提交的事务回放完成;这样确保在故障切换时客户端都能读取到主服务器上的最新数据,保证了一致性

MGR读写一致性的优缺点

官方引入的MGR读写一致性既有它自身的天然优势,也不可避免的存在相应的不足,其优缺点如下:

优点:MGR配合中间件,比如DBLE这类有读写分离功能的中间件,在MGR单主模式下,可以根据业务场景进行读写分离,不用担心会产生延迟,充分利用了MGR主节点以外的节点。

缺点:使用读写一致性会对性能有极大影响,尤其是网络环境不稳定的场景下。

在实际应用中需要大家因地制宜,根据实际情况选择最适配的方案。

MGR读写一致性的方案

针对不同应用场景应当如何选择MGR读写一致性的相关方式,官方提供了几个参数以及与其相对应的应用场景:

AFTER

适用场景1:写少读多的场景进行读写分离,担心读取到过期事务,可选择AFTER。

适用场景2:只读为主的集群,有RW的事务需要保证提交的事务能被其他后序事务读到最新读数据,可选择AFTER。

BEFORE

适用场景1:应用大量写入数据,偶尔进行读取一致性数据,应当选择BEFORE。

适用场景2:有特定事务需要读写一致性,以便对敏感数据操作时,始终读取最新的数据;应当选择BEFORE。

BEFORE_AND_AFTER

适用场景:有一个读为主的集群,有RW的事务既要保证读到最新的数据,又要保证这个事务提交后,被其他后序事务读到;在这种情况下可选择BEFORE_AND_AFTER。

在特定会话上设置一致性

举例1:某一事务语句,需要其他节点的数据强一致性。可以使用SET@@SESSION.group_replication_consistency= ‘AFTER’进行设置。

举例2:跟例1相似,在每天执行分析语句事务并且需要获得读取新数据的情况下。

可以使用SET @@SESSION.group_replication_consistency= ‘BEFORE’ 进行设置

mysql mgr写入_社区投稿 | MySQL MGR一致性读写特性解读相关推荐

  1. mysql 跨实例复制数据_社区投稿 | MySQL 跨实例 copy 大表解决方案

    作者简介 任坤,现居珠海,先后担任专职 Oracle 和 MySQL DBA,现在主要负责 MySQL.mongoDB 和 Redis 维护工作. 一.背景 某天晚上 20:00 左右开发人员找到我, ...

  2. go连接mysql集群_什么是MySQL集群-Go语言中文社区

    一.什么是MySQL集群 MySQL集群是一个无共享的(shared-nothing).分布式节点架构的存储方案,其目的是提供容错性和高性能. 数据更新使用读已提交隔离级别(read-committe ...

  3. mysql_upgrade --force_社区投稿 | MySQL 8.0.16 告别mysql_upgrade升级方式

    最熟悉的命令要消失了! MySQL 8.0.16 开始,MySQL 不推荐使用mysql_upgrade.取而代之的是 server upgrade的升级方式. 一.为什么变更升级方式 官方为什么这么 ...

  4. 监控mysql数据库 更新_实时监控mysql数据库变化

    对于二次开发来说,很大一部分就找找文件和找数据库的变化情况 对于数据库变化.还没有发现比较好用的监控数据库变化监控软件. 今天,我就给大家介绍一个如何使用mysql自带的功能监控数据库变化 1.打开数 ...

  5. mysql 实例可用性_转载:MySQL数据库的高可用性分析

    MySQL数据库是目前开源应用最大的关系型数据库,有海量的应用将数据存储在MySQL数据库中.存储数据的安全性和可靠性是生产数据库的关注重点.本文分析了目前采用较多的保障MySQL可用性方案. MyS ...

  6. ssh mysql环境搭建_搭建一个MySQL高可用架构集群环境

    架构 使用一台MHA manager.一台MySQL master节点.两台MySQL slave节点 软件版本 虚拟机:Ubuntu 18 MySQL:5.7.32 MHA:0.54 环境检查 安装 ...

  7. 阿里mysql连接数据库服务器配置_配置链接mysql数据库

    本文档介绍如何使用Sqoop工具实现文件存储HDFS和关系型数据库MySQL之间的双向数据迁移. 背景信息 Sqoop是一款开源的工具,主要用于在Hadoop和结构化数据存储(如关系数据库)之间高效传 ...

  8. mysql停止主从_不停止mysql服务配置主从

    不影响主库线上的服务前提下,增加从库,前提是线上的主库配置中已经开启binlog并且指定了server-id. linux主192.168.0.70 版本Centos6.7 nginx1.10 php ...

  9. mysql 硬负载_为啥单机MySQL又遭遇瓶颈?MySQL主从复制替你解决单机问题

    成长是一棵树,总是在你不知不觉的情况下快乐长大:成长是一株草,总是在你不知不觉的情况下长满大地:成长是一朵花,总是在你不知不觉的情况下开满山头. 这不,随着时间的迁移.项目网站的用户量.数据量持续上升 ...

最新文章

  1. 鸿蒙法则的能力,真正厉害的人,都懂得这五个做事法则,如能悟透,成功不难...
  2. Linux uptime指令
  3. 【java】java的unsafe
  4. java给视频添加水印_用java实现给图片增加图片水印或者文字水印(也支持视频图像帧添加水印)...
  5. java excel 转txt_用Java实现excel转txt
  6. java 可以做前端么_java怎么做前端?Java web前端必备技术
  7. php 生成xls解决乱码,怎么解决php导出excel文件乱码问题
  8. windows ghost系统下载
  9. ImageNet 2012 中文标签(Chinese Labels)
  10. Plotting timeseries
  11. 深度揭秘暴力破解SSH密码 —— Medusa美杜莎
  12. 邮票问题(两张邮票)
  13. 深入浅出自然语义处理原理并构建自然语义处理(NLP)模型GPT2
  14. 文件下载(xls、txt、pdf)格式
  15. 22点到凌晨5点是几个小时_寅时是几点到几点:3点-5点(24小时凌晨3时~凌晨5时)...
  16. 这篇文章讲了一个新科技
  17. wps怎么投递简历发到boss直聘_boss直聘怎么投简历
  18. 5.OpenCV基础
  19. [Luogu] P3376 模板-网络流-最大流
  20. 布道”织链为网“ 冒志鸿应邀在猎豹移动演讲 | ArcBlock 动态

热门文章

  1. 聊聊Eureka Server的REST API
  2. linux 下的动态库制作 以及在python 中如何调用 c 函数库
  3. JAVA大数据-Week4-DAY6-JDBC
  4. oracle 0.1变.1,Oracle在12.1.0.2开始改变了补丁策略
  5. java编译器源码详解_已更新至第8章 | LLVM 编译框架详解
  6. mysql 刷新二进制日志_mysql binglog 二进制日志文件
  7. linux cpu 没有内核,linux – 如何获得无内核的工作? nohz_full,rcu_nocbs,isolcpus还有什么?...
  8. 【转】Android 最火框架XUtils之注解机制详解
  9. 线程同步,通信与虚方法
  10. 思科isis路由的优先级_【分享】超全!集成ISIS知识详解~