Mycat 详细介绍及入门实战,解决数据库性能问题

一、基本原理

1、数据分片

(1)、水平分片

        Mycat 将一个大表的数据按照一定的规则拆分成多个小表,分布在不同的数据库节点上。例如,可以根据某个字段的值进行哈希取模,将数据均匀的分布到不同的节点上。

        这样做的好处是可以将数据分散到多个节点上,提高查询和写入的性能,同时也可以突破单个数据库的存储和处理能力限制。

(2)、垂直分片

        将一个数据库中的不同表按照业务逻辑进行拆分,分别存储在不同的数据库节点上。

        比如将用户的信息表和订单表分别存储在不同的节点上,这样可以根据业务的需求独立的对不同的表进行扩展和优化

2、中间件层

 (1)、连接管理

        Mycat 作为中间件,接收来自应用程序的数据库连接请求,并将这些请求转发到后端的真实数据库节点上。

        它维护着与应用程序和数据库节点的连接池,提高连接的复用率,减少连接建立和关闭的开销

(2)、SQL解析

        当接收到SQL请求时,Mycat 会对SQL 语句进行解析,识别出查询的表、字段、条件等信息

        根据解析结果和配置的分库分表规则,确定SQL语句应该在那些数据库节点上执行。

(3)、SQL路由

        降解析后的SQL语句转发到相应的数据库节点上执行,如果是查询语句,Mycat 会从多个节点上获取结果,并进行合并和排序后返回给应用程序。

        如果是写入语句,Mycat会根据分库分表规则降数据写入到相应的节点上。

(4)、结果合并

        对于从多个数据库节点返回的查询结果,Mycat 会进行合并和排序 ,使得应用程序看到的结果就像从一个单一的数据库中查询出来的一样。

3、高可用和负载均衡

(1)、高可用

        Mycat 可以配置多个节点组成集群,当某个节点出现故障时,其他节点可以接管其工作,保证系统的高可用性。

        可以通过主从复制、心跳检测等机制实现故障自动切换。

(2)、负载均衡

        Mycat 可以根据配置的策略将请求均匀地分发到不同的数据库节点上,实现负载均衡,避免某个节点负载过高。

        创建的负载均衡策略有,轮询、随机、权重等。

二、基础入门实战

1、部署环境

安装mycat 依赖的jdk环境,以及对应的MySQL客户端

详细安装jdk的方法请看:不依赖zookeeper的Kafka集群_kafka下载哪个版本-CSDN博客

安装MySQL数据库客户端,这里是基于原有的yum源仓库,直接进行下载的

2、部署Mycat

下载安装包:| MYCAT官方网站—中国第一开源分布式数据库中间件

将准备好的mycat二进制安装包解压到指定目录下,并使其命令全局可用,配置对应的环境变量

 tar -xf Mycat-server.tar.gz -C /usr/local/

 vim /etc/profile.d/mycat.sh

 source /etc/profile.d/mycat.sh

运行使其生效

3、先开启mycat 服务,预运行一下

mycat start

开启成功

4、更改其主配置文件和schema.xml 文件

vim conf/server.xml

将端口改为3306

基于root 用户关联MySQL数据库,以及对应的密码,TESTDB 为对外显示的数据库名

vim conf/schema.xml

前端显示数据库

后端关联数据库

心跳检测,读写节点分离

在MySQL数据中进行设置root 用户,使其可以被其他主机访问登录

其密码一般使用兼容老版本的方式老进行设置

CREATE USER 'root'@'%' IDENTIFIED BY '123456';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%';
FLUSH PRIVILEGES;select user,host,authentication_string from mysql.user;

重启mycat服务

mycat restart

5、进行验证

基于中间件,实现分库分表的功能

前端显示的数据库

库中的内容是关联的后端数据库test中的数据

验证其读数据信息来自于后端哪一个MySQL数据库

其所读的数据轮替从后端从服务器中获取

6、开启后端主服务器的通用日志功能,查看其是否被触发日志信息

在配置文件中添加 general_log

重启服务进行查看

查询通用日志所在位置

select @@general_log_file;

可以看到,每过10秒,进行一次的心跳检测

7、当在mycat中对数据进行更改时,查看日志

触发主MySQL数据库的通用日志信息。

可以看出,其写数据时,只会在后端主数据库中写入,而读取数据,是从其他两台从数据库中获取的数据

8、将后端两台从服务器停止服务,然后访问

先将从主机node1停服

Mycat只能从120主机读取数据信息

当node2/120,主机也停止服务时

这时,mycat读写操作均是从node主机中(主MySQL数据库)中获取的数据

从主MySQL服务器的通用日志中可以查看到,其mycat在其所代理的后端所有read服务器全部瘫痪时,将向主数据库中发起read数据调用

当两台从数据库重新启动时,其访问读数据又会重新回归到从数据库中

成功的实现了MySQL数据的读写分离,分库分表功能

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/55889.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据结构7——二叉树的顺序结构以及堆的实现

在上篇文章数据结构6——树与二叉树中,我们了解了树和二叉树的概念,接着上篇文章,在本篇文章中我们学习二叉树顺序结构的实现。 目录 1. 二叉树的顺序存储结构 2. 堆的概念及结构 1. 堆的概念 2. 堆的结构 3. 堆的实现 1. 堆节点 2. 交…

R语言实现logistic回归曲线绘制

方式一&#xff1a;编制函数 x<-rnorm(10000)#设置随机种子 #编写绘图函数代码快 f <- function(x){y 1/(1 exp(-x))plot(x,y)}#sigmoid函数 f(x)​ 方式二&#xff1a;Sigmoid函数代码 x<-rnorm(10000)#设置随机种子 #编写绘图函数代码块 #y<-1/(1exp(-x)) y&…

数据结构-复杂度

复杂度 1.数据结构1.1算法 2.算法效率2.1复杂度的概念 3.时间复杂度3.1大O渐进表示法3.2时间复杂度计算示例3.2.1 示例13.2.2 示例23.2.3 示例33.2.4 示例43.2.5 示例5&#xff1a;3.2.6 示例63.2.7 示例7 4.空间复杂度4.1.1 示例14.1.2 示例2 5.常见复杂度对比6.复杂度算法题6…

【重学 MySQL】六十七、解锁检查约束,守护数据完整性

【重学 MySQL】六十七、解锁检查约束&#xff0c;守护数据完整性 检查约束的基本概念检查约束的语法检查约束的使用场景注意事项示例 在MySQL中&#xff0c;检查约束&#xff08;CHECK&#xff09;是一种用于确保表中数据满足特定条件的约束。 检查约束的基本概念 检查约束用…

考研前所学c语言02(2024/10/16)

1.一个十进制的数转化为二进制的就是不断除二取余&#xff0c;得到的余数从下到上取 比如123&#xff1a; 结果为&#xff1a; 同理其他的十进制转八进制&#xff0c;十六进制就除八&#xff0c;除十六即可 再比如123转十六进制&#xff1a; 因为余数是11&#xff0c;十六进…

【JavaEE初阶】深入理解网络编程—使用UDP协议API实现回显服务器

前言 &#x1f31f;&#x1f31f;本期讲解关于TCP/UDP协议的原理理解~~~ &#x1f308;感兴趣的小伙伴看一看小编主页&#xff1a;GGBondlctrl-CSDN博客 &#x1f525; 你的点赞就是小编不断更新的最大动力 &#x1f386;那么废话不…

从0开始深度学习(12)——多层感知机的逐步实现

依然以Fashion-MNIST图像分类数据集为例&#xff0c;手动实现多层感知机和激活函数的编写&#xff0c;大部分代码均在从0开始深度学习&#xff08;9&#xff09;——softmax回归的逐步实现中实现过 1 读取数据 import torch from torchvision import transforms import torchv…

查找与排序-交换排序

交换排序是基于“比较”和“交换”两种操作来实现的排序方法 。 由于选择“比较”的基准元素不同&#xff0c;可将交换排序分为以下两种&#xff1a; 冒泡排序快速排序 一、冒泡排序 1.冒泡排序基本思想 因为其实现与气泡从水中往上冒的过程类似而得名。 每一趟的…

基于SpringBoot+Vue+uniapp微信小程序的垃圾分类系统的详细设计和实现(源码+lw+部署文档+讲解等)

项目运行截图 技术框架 后端采用SpringBoot框架 Spring Boot 是一个用于快速开发基于 Spring 框架的应用程序的开源框架。它采用约定大于配置的理念&#xff0c;提供了一套默认的配置&#xff0c;让开发者可以更专注于业务逻辑而不是配置文件。Spring Boot 通过自动化配置和约…

Redux (八) 路由React-router、嵌套路由、路由传参、路由懒加载

文章目录 一、React-Router的基本使用1. 安装及基本使用(路由映射配置)2. 路由跳转Link与NavLink3. Navigate导航4. 处理路径不存在的情况 二、嵌套路由三、手动跳转 (类似编程式路由导航)1. 函数式组件2. 类组件实现手动跳转 四、路由传参1. 路径设置占位符(params)2. search传…

Java面试指南:Java基础介绍

这是《Java面试指南》系列的第1篇&#xff0c;本篇主要是介绍Java的一些基础内容&#xff1a; 1、Java语言的起源 2、Java EE、Java SE、Java ME介绍 3、Java语言的特点 4、Java和C的区别和联系&#xff1f; 5、面向对象和面向过程的比较 6、Java面向对象的三大特性&#xff1a…

leetcode30:串联所有单词的字串

给定一个字符串 s 和一个字符串数组 words。 words 中所有字符串 长度相同。 s 中的 串联子串 是指一个包含 words 中所有字符串以任意顺序排列连接起来的子串。 例如&#xff0c;如果 words ["ab","cd","ef"]&#xff0c; 那么 "abcdef…

1. 解读DLT698.45-2017通信规约--预连接响应

国家电网有限公司企业标准&#xff0c;面向对象的用电信息数据交换协议DLT698.45-2017 为提高用电信息采集系统的业务适应性、采集效率、安全性和数据溯源性&#xff0c;规范用电信息数据交换协议的通信架构、数据链路层、应用层、接口类与对象标识&#xff0c;制定本标准。 …

Linux系统:(Linux系统概述与安装)

硬件计算机硬件是指计算机系统中所有物理部件的总称。包括计算机主机、显示器、键盘、鼠标、内存、硬盘、处理器、主板等等。这些硬件部件是计算机系统运行的基础 不管是电脑系统(个人电脑、服务器等)、还是移动端操作系统(手机、平板等)。它的功能就是做为用户和硬件之间的桥梁…

前端求职简历-待补充

当然可以&#xff0c;针对大厂的前端岗位&#xff0c;一个吸引人的简历应该突出你的技术能力、项目经验、教育背景以及任何能体现你学习能力和团队协作能力的证明。以下是一个简历大纲示例&#xff0c;你可以根据自己的实际情况进行调整&#xff1a; 个人信息 姓名联系方式&a…

图文深入介绍oracle资源管理(续)

1. 引言&#xff1a; 本文将承接上篇继续深入介绍oracle资源管理。本文重点介绍如何使用oracle资源管理器管理好DB。 2. 资源管理器&#xff1a; 可以使用图形界面 OEM$或命令行调用 DBMS RESOURCE MANAGER 程序包的过程进行数据库资源管理。 调用资源管理器的先决条件&…

瑞数后缀加密怎么处理

前言&#xff1a; 瑞数我们经常补环境通过&#xff0c;但是遇到瑞数后缀不知道怎么处理 就拿瑞数4来讲 解决方法&#xff1a; &#xff08;1&#xff09;传明文加密参数 一般情况&#xff0c;我们传明文加密参数也能访问 &#xff08;2&#xff09;再补环境基础调用open …

基于stm32的4G模块点灯实验

led模块功能封装 #include "led.h" #include "sys.h"//初始化GPIO函数 void led_init(void) {GPIO_InitTypeDef gpio_initstruct;//打开时钟__HAL_RCC_GPIOB_CLK_ENABLE();//调用GPIO初始化函数gpio_initstruct.Pin GPIO_PIN_8 | GPIO_PIN_9;gpio_inits…

排序算法 —— 直接插入排序

目录 1.直接插入排序的思想 2.直接插入排序的实现 实现分析 实现代码 3.直接插入排序的分析 时间复杂度分析 空间复杂度分析 稳定性 1.直接插入排序的思想 直接插入排序的思想就是把待排序的元素按其关键码值的大小依次插入到一个已经排好序的有序序列中&#xff0c…

pycharm调试带参数命令行的程序

点击 run configuration 点击加号&#xff0c;选择python name填写程序名字&#xff0c;script填写程序路径&#xff0c;下一行填写传入的参数 点击apply&#xff0c;再点ok&#xff0c;即可debug 参考&#xff1a; pycharm 调试模式下命令行参数的传递_pycharm debug传参 ya…