您当前的位置:首页 > 电脑百科 > 数据库 > MYSQL

详解MySQL内核对读写分离的支持特性

时间:2019-09-09 11:49:45  来源:  作者:

概述

MySQL内核为读写分离的实现提供了支持,包括通过系统variable设置目标节点,session或者是事务的只读属性,等待/检查指定的事务是否已经Apply到只读节点上,以及事务状态的实时动态跟踪等的能力。

今天主要分享下mysql内核对读写分离的支持特性,以下基于mysql5.7版本。


只读属性--read_only

详解MySQL内核对读写分离的支持特性

 

如需设置节点为只读状态,将该read_only参数设置为1或TRUE,但设置 read_only=1 状态有几个需要注意的地方:

详解MySQL内核对读写分离的支持特性

 

  • read_only=1只读模式,不会影响slave同步复制的功能,所以在MySQL slave库中设定了read_only=1后,通过 show slave statusG 命令查看salve状态,可以看到salve仍然会读取master上的日志,并且在slave库中应用日志,保证主从数据库同步一致
  • read_only=1只读模式,可以限定普通用户进行数据修改的操作,但不会限定具有super权限的用户的数据修改操作
  • 临时表的操作不受限制
  • log表(mysql.general_log和mysql.slow_log)的插入不受影响
  • Performance Schema表的update,例如update和truncate操作
  • ANALYZE TABLE或者OPTIMIZE TABLE语句 为了让所有的用户都不能进行读写操作,MySQL 5.6就需要执行给所有的表加读锁的命令 flush tables with read lockG,这样使用具有super权限的用户登录数据库,想要发生数据变化的操作时,也会提示表被锁定不能修改的报错,同时,slave的同步复制也会受到影响。

只读属性--super_read_only

在5.7之后,可以通过设置这个variable, 使得具有super权限的用户也不能对数据做修改操作,而不必通过flush tables with read locKG的方式了。

详解MySQL内核对读写分离的支持特性

 

把super_read_only设置成on, read_only会隐式的被设置成on;反过来,把read_only设置成off,super_read_only就会隐式的被设置成off。

详解MySQL内核对读写分离的支持特性

 


只读属性--tx_read_only

如果这个variable设置为ON,事务的访问模式就变成了只读,不能对表做更新,但对临时表的更新操作仍然是允许的。

详解MySQL内核对读写分离的支持特性

 

设置只读事务在引擎层可以走优化过的逻辑,相比读写事务的开销更小,例如不用分配事务id,不用分配回滚段,不用维护到全局事务链表中。

详解MySQL内核对读写分离的支持特性

 


读一致性保证

读写节点之间的数据通常是有gap的,如果有办法知道在主节点上的执行的事务已经被复制到了只读节点,对这(些)事务敏感的读操作就可以被路由到只读节点上,这就是“读一致性”。

MySQL 5.6 引入了GTID (GTID 实际上 是由 UUID+TID 组成的。其中 UUID 是一个 MySQL 实例的唯一标识。TID 代表了该实例上已经提交的事务数量,并且随着事务提交单调递增。),提升了MySQL节点复制的功能。

详解MySQL内核对读写分离的支持特性

图:基于GTID的主从复制

MySQL 5.6提供了WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS(GTID_SET[,TIMEOUT])函数来等待从节点把GTID_SET指定事务都执行完毕,除非timeout(以秒为单位)的时间已经耗费而超时。 这个方法存在一些缺点,例如:

  1. 该功能依赖于slave来运行,如果复制线程没有启动或者出错了,就会返回错误。在某些情况下我们需要一直等待;
  2. 返回的是执行的事件的个数,这通常是没有意义的,返回成功或者失败即可。

MySQL 5.7为解决上面的几个问题,又添加了新的函数 WAIT_FOR_EXECUTED_GTID_SET(GTID_SET[,TIMEOUT])。当GTID_SUBSET(GTID_SET, @@global.gtid_executed)成立时,即指定的GTID是gtid_executed的子集时,返回0表示成功,否则返回1,表示失败,如果超时,也会失败。


总结

读写分离是MySQL实现负载均衡,保证高可用和高扩展性的重要手段,MySQL内核提供了对读写分离的多种手段的支持,从通过设置系统variable在事务,session,以及节点级别设置只读属性,到通过使用GTID和WAIT_FOR_EXECUTED_GTID_SET函数,都可以保证只读节点与主几点的读一致性。



Tags:MySQL   点击:()  评论:()
声明:本站部分内容来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系,我们将及时更正、删除,谢谢。
▌相关评论
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表
▌相关推荐
MySQL慢查询日志是我们在日常工作中经常会遇到的一个功能,MySQL慢查询日志提供了超过指定时间阈值的查询信息,为性能优化提供了主要的参考依据,是一个非常实用的功能,MySQL慢查...【详细内容】
2020-07-10   MySQL  点击:(0)  评论:(0)  加入收藏
作者 | 胡梦宇,知乎数据架构平台开发工程师责编 | 屠敏头图 | CSDN 下载自东方 IC出品 | CSDN(ID:CSDNnews)背景ApacheHive 是基于 Apache Hadoop 的一个数据仓库工具,可以将结...【详细内容】
2020-07-09   MySQL  点击:(0)  评论:(0)  加入收藏
无论是运维、开发、测试,还是架构师,数据库技术是一个必备加薪神器。而 MySQL 由于免费,而且性能强劲,是目前使用最广泛的数据库产品,同时也是入门门槛最低的数据库产品之一。更...【详细内容】
2020-07-09   MySQL  点击:(0)  评论:(0)  加入收藏
Navicat是一套数据库管理工具,专为简化数据库的管理及降低系统管理成本而设。Navicat 是以直觉化的图形用户界面而建的,可以安全和简单地创建、组织、访问并共用信息。Navica...【详细内容】
2020-07-09   MySQL  点击:(0)  评论:(0)  加入收藏
一、数据库和字符集1. 建库时指定创建数据库时,显式指定字符集和排序规则,同时,当切换到当前数据库后,参数 character_set_database,collation_database 分别被覆盖为当前显式...【详细内容】
2020-07-09   MySQL  点击:(0)  评论:(0)  加入收藏
对于linux上mysql的用户信息修改问题,经常会困惑很多同学们,时间长久不操作,网上问题总结不全,总是花费大量的时间去整理再解决问题,所以今天我就给大家分享一下关于linux 上mysq...【详细内容】
2020-07-09   MySQL  点击:(0)  评论:(0)  加入收藏
当一张百亿数据量的表放在你面前,你将面临着什么?加列?哭吧,怎么也得等个几天甚至几周。加索引?哭吧,不论你用 pt-online-schema,还是 gh-ost,你都面临着拷贝一张临时表用以存储临...【详细内容】
2020-07-08   MySQL  点击:(0)  评论:(0)  加入收藏
概述锁是计算机协调多个进程或纯线程并发访问某一资源的机制,这些资源包括CPU、内存、I/O等,而在数据库中,数据也是一种供许多用户(进程/线程)共享的资源。如何保证数据并发访问...【详细内容】
2020-07-08   MySQL  点击:(0)  评论:(0)  加入收藏
对于数据库这一块询问比较多的就是在 MySQL 中怎么去选择一种何时当前业务需求的存储引擎,而 MySQL 中支持的存储引擎又有很多种,那么 MySQL 中分别又有那些,怎么优雅的使用呢?...【详细内容】
2020-07-07   MySQL  点击:(0)  评论:(0)  加入收藏
程序员小乐(ID:study_tech)第 910 次推文 图源:百度往日回顾:JVM 史上最最最完整深入解析 正文前言日志文件记录了影响MySQL数据库的各种类型活动,MySQL数据库中常见的日志文件...【详细内容】
2020-07-07   MySQL  点击:(0)  评论:(0)  加入收藏
MySQL简介MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的...【详细内容】
2020-07-06   MySQL  点击:(2)  评论:(0)  加入收藏
Nacos在0.7版本之前,在单机模式时nacos使用嵌入式数据库实现数据的存储,不方便观察数据存储的基本情况。0.7版本增加了支持mysql数据源能力,具体的操作步骤: 安装数据库,版本要求...【详细内容】
2020-07-06   MySQL  点击:(0)  评论:(0)  加入收藏
我们在 MySQL 入门篇主要介绍了基本的 SQL 命令、数据类型和函数,在局部以上知识后,你就可以进行 MySQL 的开发工作了,但是如果要成为一个合格的开发人员,你还要具备一些更高级...【详细内容】
2020-07-06   MySQL  点击:(0)  评论:(0)  加入收藏
概述随着电商的发展,使用数据库的业务越来越复杂,除了掌握哪些场景可以使用索引,哪些场景适合使用索引,还需要掌握索引在运行过程中的一些使用规则,特别是组合索引的使用。比如索...【详细内容】
2020-07-06   MySQL  点击:(1)  评论:(0)  加入收藏
了解掌握MySQL数据库的架构设计、文件系统,有利于更全面、系统的掌握MySQL数据库,是进阶精通MySQL的必修课。MySQL逻辑架构总体分为客户端连接器(Connectors)和服务器端(MySQL...【详细内容】
2020-07-06   MySQL  点击:(1)  评论:(0)  加入收藏
背景及目标:现有数据1000w单表,为压力测试准备1亿条数据。步骤:1.将1000w条记录,除id外都导入到多个文件中://DELIMITERDROP PROCEDURE if EXISTS createManyTable;create PROCE...【详细内容】
2020-07-06   MySQL  点击:(0)  评论:(0)  加入收藏
概述不同版本的配置文件参数及使用方法略略有不同,具体可参考官网版主文档。如果选项名称配置错误,MySQL有可能不能启动。MySQL的配置文件一般为my.cny,不同版本或不同操作系统...【详细内容】
2020-07-06   MySQL  点击:(0)  评论:(0)  加入收藏
公司有新要求,ios客户端要上线评论中可以使用emoji表情的功能,在mysql 5.5 之前,UTF-8编码只支持1-3个字节;从MySQL 5.5开始,可以支持4个字节UTF编码 utf8mb4 ,一个字符能够支持...【详细内容】
2020-07-05   MySQL  点击:(0)  评论:(0)  加入收藏
无条件简单查询方法虚拟数据准备-- [创建表] --DROP TABLE IF EXISTS `company_staff`;CREATE TABLE `company_staff` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` v...【详细内容】
2020-07-03   MySQL  点击:(3)  评论:(0)  加入收藏
概述一条普通的SQL查询语句它在MySQL数据库中是怎么样被解析和执行的呢?下面一起来了解一下,MySQL是如何解析SQL查询语句的,这对理解MySQL的执行计划也大有益处。解析顺序下面...【详细内容】
2020-07-03   MySQL  点击:(1)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条