MySQL读写分离原理详细解析

目录
  • 一、读写分离的概念
  • 二、引入中间件MyCat
  • 三、MyCat服务端口和管理端口

一、读写分离的概念

读写分离是基于主从复制来实现的。在实际的应用环境中,肯定是读操作多,就像我们在电商平台上去购买东西,可能看了100个也就买了一两个。所以读操作永远比写这种更新操作多很多。所以我们基于主从复制的读写分离配置,就是让一个主库专门用来做数据的修改,写的时候专门在主库上写,主库通过主从复制把数据的更改通过binlog同步到从库上去,那么其他的客户端查询的请求都会最终映射到从库上去,而我们一个主库带上两三个从库,主库专门用来做数据的更新(写操作),从库专门用来做读操作这样一来可以很好的分摊读写的压力,不用全部都集中在主库上,对于后端服务的并发处理能力有很大的提高,另外就是它的高可用容灾,当主库挂了以后,可以把指定的从库变成主库。

MySQL client通过mysql 提供的API,用mysql自定义的基于TCP的数据协议(简称mysql协议)与MySQL Server通信,访问MySQL Server数据库。

如果只有一台服务器(单机环境),所有数据的增删改查都是在一台服务器上进行,随着我们的服务被越来越多的人使用,流量逐渐变大,需要并发能力逐渐提升,所以如果我们发现数据库性能到瓶颈了,我们可以做读写分离操作,提高后台服务。

图中的MySQL主服务器专门做写操作,下面连着2个MySQL从服务器专门做读操作,读请求转发到B、C,写请求转发到A。

如果我们在客户端上直接用代码写死,insert、update等写操作在A上做,show、select等读操作在B、C上做,相当于代码和主从环境就是强绑定的。这就导致代码的稳定性不太好,因为和环境强相关了,我们写代码得时候必须得知道哪个机器是负责写操作的主库,哪个机器是负责读操作的从库,由代码来选择。而这时如果有某个机器挂掉了,代码也不会知道,还是按照原来的方式转发请求,通信就会出现问题,所以把读写分离用代码实现肯定不合适。所以在实际的解决方案中,读写分离需要依赖数据库的中间件

二、引入中间件MyCat

实际上,读写分离,分库分表都是需要依赖数据库中间件(mycat),mycat就是代理服务器的角色。

客户端实际上区分不出来连的是MyCat还是MySQL,因为通信都是遵守的是MySQL通信协议,之前怎么和MySQL通信,现在就怎么和MyCat通信,所以不用进行区分。

在MyCat上配置读写分离,我们在客户端上的代码不用做任何变更,代码上不需要区分哪个请求是读,哪个请求是写,代码直接访问的是MyCat,由MyCat解析请求,根据SQL的读写性质转发到负责相应操作的服务器,实现读写分离。

在MyCat上需要配置主服务器和从服务器的信息,有3种情况:一主一从、一主多从、多主多从

一主多从场景:当写库(master)挂了,MyCat还可以马上把一个从库(slave)直接变成一个写库(master),那相当于又回到一台机器的处理,因为从库和从库之间并没有主从复制的配置,所以我们还需要把变成写库的从库还要和其他从库之间配置一下主从复制。

多主多从:

可以看到图中,MyCat服务器挂了两套环境,如果其中1套的主库宕机了(它对应的从库也就不能用了),此时MyCat会自动切到另一套环境,因为M1和M2之间也是配置成互为主从的,所以M2可以同步M1的数据,提供与M1环境完全相同的服务,所以它的高可用容灾能力是非常不错的。

三、MyCat服务端口和管理端口

MySQL的服务端口是3306,MyCat服务端口是8066(这个端口也是可以改的),也就是MySQL Client连接的是8066端口,登录8066端口看到的界面就和登录MySQL Server的3306端口一样。MyCat还有一个管理端口9066,登录这个管理端口可以查看MyCat正在工作的所有状态以及和后端服务器的连接,以及连接数据源的状态等。

到此这篇关于MySQL读写分离原理详细解析的文章就介绍到这了,更多相关MySQL读写分离 内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • MySQL数据库主从复制与读写分离

    目录 一.主从复制 主从复制三线程 主从复制的过程: 主从复制的策略: 主从复制高延迟 二.读写分离 读写分离概念 读写分离原因与场景 总结 一.主从复制        主从复制:在实际的生产中,为了解决Mysql的单点故障以及提高MySQL的整体服务性能,一般都会采用主从复制.即:对数据库中的数据.语句做备份. 主从复制三线程        Mysql的主从复制中主要有三个线程:master(binlog dump thread).slave(I/O thread .SQL thread),M

  • SpringBoot项目中如何实现MySQL读写分离详解

    目录 1.MySQL主从复制 1.1.介绍 二进制日志: MySQL复制过程分成三步: 1.2.主从库搭建 1.2.1.主库配置 1.2.2.从库配置 1.3.坑位介绍 1.3.1.UUID报错 1.3.2.server_id报错 1.3.3.同步异常解决 操作不规范,亲人两行泪…… 2.项目中实现 2.1.ShardingJDBC 2.2.依赖导入 2.3.配置文件 2.4.测试跑路 总结 1.MySQL主从复制 但我们仔细观察我们会发现,当我们的项目都是用的单体数据库时,那么就可能会存在如下

  • 一篇文章看懂MySQL主从复制与读写分离

    目录 引言 一.MySQL主从复制 1.MySQL的复制类型 2.MySQL主从复制的原理 3.MySQL主从复制延迟 二.MySQL读写分离 1.常见的 MySQL 读写分离分 2.MySQL 读写分离原理 三.MySQL主从复制与读写分离配置步骤 1.搭建环境 2.解决需要 3.准备阶段(关闭防火墙及控制访问机制) 4.搭建MySQL主从复制 5.搭建MySQL读写分离步骤 6.测试测试读写分离 总结 引言 企业中的业务通常数据量都比较大,而单台数据库在数据存储.安全性和高并发方面都无法满足

  • Mysql数据库的主从复制与读写分离精讲教程

    目录 前言 一.MySQL主从复制 1.支持的复制类型 2.主从复制的工作过程是基于日志 3.请求方式 4.主从复制的原理 5.MySQL集群和主从复制分别适合在什么场景下使用 6.为什么使用主从复制.读写分离 7.用途及条件 8.mysql主从复制存在的问题 9.MySQL主从复制延迟 二.主从复制的形式 三.读写分离 1.原理 2.为什么要读写分离呢? 3.什么时候要读写分离? 5.目前较为常见的MySQL读写分离 四.案例实施 1.案例环境 2.实验思路(解决需求) 3.准备 4.搭建My

  • springboot多数据源配合docker部署mysql主从实现读写分离效果

    目录 一.使用docker部署mysql主从 实现主从复制 二.springboot项目多数据源配置,实现读写分离 一.使用docker部署mysql主从 实现主从复制 此次使用的是windows版本docker,mysql版本是5.7 1.使用docker获取mysql镜像 docker pull mysql:5.7.23 #拉取镜像文件 docker images #查看镜像文件 2.使用docker运行mysql master docker run --name mysql-master

  • 分享MySQL 主从延迟与读写分离的七种解决方案

    目录 一.强制走主库 二.从库延迟查询 三.判断主从是否延迟?决定选主库还是从库 1.针对这个问题,有什么解决方案? 四.从库节点判断主库位点 五.比较 GTID 六.引入缓存中间件 七.数据分片 1.转换到数据库方面 前言: 我们都知道互联网数据有个特性,大部分场景都是 读多写少,比如:微博.微信.淘宝电商,按照 二八原则,读流量占比甚至能达到 90%. 结合这个特性,我们对底层的数据库架构也会做相应调整.采用 读写分离. 处理过程: 客户端会集成 SDK,每次执行 SQL 时,会判断是 写

  • Sharding-JDBC自动实现MySQL读写分离的示例代码

    目录 一.ShardingSphere和Sharding-JDBC概述 1.1.ShardingSphere简介 1.2.Sharding-JDBC简介 1.3.Sharding-JDBC作用 1.4.ShardingSphere规划线路图 1.5.ShardingSphere三种产品的区别 二.数据库中间件 2.1.数据库中间件简介 2.2.Sharding-JDBC和MyCat区别 三.Sharding-JDBC+MyBatisPlus实现读写分离 3.0.项目代码结构和建表SQL语句 3.

  • MySQL读写分离原理详细解析

    目录 一.读写分离的概念 二.引入中间件MyCat 三.MyCat服务端口和管理端口 一.读写分离的概念 读写分离是基于主从复制来实现的.在实际的应用环境中,肯定是读操作多,就像我们在电商平台上去购买东西,可能看了100个也就买了一两个.所以读操作永远比写这种更新操作多很多.所以我们基于主从复制的读写分离配置,就是让一个主库专门用来做数据的修改,写的时候专门在主库上写,主库通过主从复制把数据的更改通过binlog同步到从库上去,那么其他的客户端查询的请求都会最终映射到从库上去,而我们一个主库带上

  • Mysql中复制详细解析

    1.mysql复制概念 指将主数据库的DDL和DML操作通过二进制日志传到复制服务器上,然后在复制服务器上将这些日志文件重新执行,从而使复制服务器和主服务器的数据保持同步.复制过程中一个服务器充当主服务器(master),而一个或多个其它服务器充当从服务器(slaves).主服务器将更新重新写入二进制日志文件,并维护文件的一个索引以跟踪日志循环.这些日志可以记录发送到从服务器的更新.当一个从服务器连接主服务器时,它通知主服务器.从服务器在日志中读取的最后一次成功更新的位置.从服务器接受从那时起发

  • MySQL索引事务详细解析

    目录 一.索引 1.概念 2.作用 3.缺陷 4.使用场景 5.使用 1.查看索引 2.创建索引 3.删除索引 6.案例 二.事务 1.为什么使用事务 2.事务的概念 3.使用 4.特性 一.索引 1.概念 索引是一种特殊的文件,包含着对数据表里所有记录的引用指针,可以对表中的一列或者多列创建索引,并指定索引的类型,各类索引有各自的数据结构实现. (这里对于索引也只是简单了解,写了些皮毛) 更浅显易懂的来说:数据库的数据保存在硬盘,硬盘不知道具体保存在哪个位置,索引就是用来告诉硬盘数据在哪个位置

  • MySQL索引结构详细解析

    目录 简介 索引结构(树) 为什么用树,而不用哈希表 BTree索引 B+Tree索引 聚簇索引与非聚簇索引 索引分类 性能分析 索引创建场景 简介 在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据,这样就可以在这些数据结构上实现高级查找算法.这种数据结构,就是索引. 一般来说索引本身也很大,不可能全部存储在内存中,因此索引往往以索引文件的形式存储的磁盘上. 优点: 1.类似大学图书馆建书目索引,提高数据检索的效率,降低数据库的IO成本. 2.通过

  • MySQL索引机制的详细解析及原理

    目录 一.索引的类型与常见的操作 二.常见的索引详解与创建 三.索引的原理 1.通过实验介绍B+tree 2.延伸 四.聚簇索引和非聚簇索引 1.使用聚簇索引的优势 2.什么情况下无法使用索引 总结 一.索引的类型与常见的操作 前缀索引 MySQL 前缀索引能有效减小索引文件的大小,提高索引的速度.但是前缀索引也有它的坏处:MySQL 不能在 ORDER BY 或 GROUP BY 中使用前缀索引,也不能把它们用作覆盖索引(Covering Index). 复合索引 集一个索引包含多个列(最左前

  • MySQL Redo与Undo日志详细解析

    目录 1. Redo日志的介绍 1.1 Redo日志的作用 1.2 Redo日志的格式与类型 2. 写入Redo日志的流程(MTR) 3. Checkpoint机制 4. Undo日志介绍 5. MVCC 1. Redo日志的介绍 Redo日志是物理日志,记录的是页面的变化. 1.1 Redo日志的作用 提升数据库写入效率 保证数据库不丢数据,进行数据恢复 1.2 Redo日志的格式与类型 所谓REDO的组织方式,就是如何把需要的REDO内容记录到磁盘文件中,以方便高效的REDO写入,读取,恢复

  • MySQL DELETE语法使用详细解析

    以下的文章主要描述的是MySQL DELETE语法的详细解析,首先我们是从单表语法与多表语法的示例开始的,假如你对MySQL DELETE语法的相关内容十分感兴趣的话,你就可以浏览以下的文章对其有个更好的了解. 单表语法: 复制代码 代码如下: DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name   [WHERE where_definition]   [ORDER BY ...]   [LIMIT row_count] 多表语法: 复制代码

  • 对MySQL配置参数 my.ini/my.cnf的详细解析

    以下的文章主要描述的是对MySQL配置参数 my.ini/my.cnf的详细解析,我们主要是以实例演示的方式来对MySQL配置参数 my.ini/my.cnf的实际操作步骤进行说明,以下就是相关内容的具体描述. 1.获取当前配置参数 要优化MySQL配置参数,首先要了解当前的配置参数以及运行情况.使用下列命令可以获得目前服务器使用的配置参数: 复制代码 代码如下: mysqld –verbose –help mysqladmin variables extended-status –u root

  • MySQL主从复制与读写分离原理及用法详解

    本文实例讲述了MySQL主从复制与读写分离原理及用法.分享给大家供大家参考,具体如下: 主从复制 概念 影响MySQL-A数据库的操作,在数据库执行后,都会写入本地的日志系统A中. 假设,实时的将变化了的日志系统中的数据库事件操作,在MYSQL-A的3306端口,通过网络发给MYSQL-B. MYSQL-B收到后,写入本地日志系统B,然后一条条的将数据库事件在数据库中完成. 那么,MYSQL-A的变化,MYSQL-B也会变化,这样就是所谓的MYSQL的复制,即MYSQL replication.

  • MySQL索引详细解析

    目录 1. MySQL 索引的最左前缀原则 2. 前缀索引 3. 索引下推(ICP——Index Condition Pushdown) 4. 查看 MySQL 语句是否用到索引 5. 为什么官方建议用自增长主键作为索引 6. 如何创建索引 7. 创建索引注意事项 8. 使用索引一定可以提高查询性能嘛 9. 索引失效 1. MySQL 索引的最左前缀原则 左前缀原则是联合索引在使用时要遵循的原则,查询索引可以使用联合索引的一部分,但是必须从最左侧开始.在创建联合索引时,要根据业务需求,where

随机推荐