当前位置: 首页 > news >正文

【mysql数据库】mycat中间件

MyCat

简介

Mycat 是数据库 中间件 。

1、 数据库中间件

中间件 是一类连接软件组件和应用的计算机软件, 以便于软件各部件之间的沟通 。
例子 Tomcat web 中间件 。
数据库 中间件 连接 java 应用程序和数据库

2、 为什么要用 Mycat

① Java 与数据库紧耦合 。
② 高访问量高并发对数据库的压力 。
③ 读 写请求数据不一致。

作用

1、读写分离

基本的原理是让主数据库处理事务性增、改、删操作(INSERT、UPDATE、DELETE),而从数据库处理SELECT 查询操作。数据库复制被用来把事务性操作导致的变更同步到集群中的从数据库。

在这里插入图片描述

2、数据分片

垂直拆分 (分库) 、 水平拆分 (分表) 、 垂直 水平拆分 (分库分表)
在这里插入图片描述

3、多数据源整合

当一个项目需要用到多种数据源如Oracle、MySQL、SQL Server、 PostgreSQL时,可以利用Mycat进行整合,只需访问Mycat 这一个 数据源就行。

在这里插入图片描述

4、数据库路由器

Mycat基于MySQL 实例的连接池复用机制,可以让每个应用最大程度地共享一个MySQL实例的所有连接池,让数据库的并发访问能力大大提升。

原理

​ Mycat的原理中最重要的一个动 词是“拦截”,它拦截 了用户发送过来的 SQL 语句,首先对 SQL
语句做了 一些特定的分析:如分片分析、路由分析、读写分离分析、缓存分析等,然后将此 SQL 发往后端的真实数据库 并将返回的结果做适当的处理,最终再返回给用户 。

逻辑库schema

业务开发人员通常在实际应用中并不需要知道中间件的存在,只需 要关注数据库,所以数据库中间件可以被当作一个或多个数据库集 群构成的逻辑库。

  • name:对应Server.xml中配置的逻辑库名TESTDB

  • checkSQLschema:在SQL语句操作时指定了数据库名称,执行时是否自动去除;true:自动去
    除,false:不自动去除。当该值设置为true时,如果我们执行语句select * from TESTDB.travelrecord;则MyCat会把语句修改为select * from travelrecord;即把表示schema的字
    符去掉,避免发送到后端数据库执行时报(ERROR 1146 (42S02): Table ‘testdb.travelrecord’
    doesn’t exist)。

  • sqlMaxLimit:当该值设置为某个数值时。每条执行的SQL语句,如果没有加上limit语句,MyCat
    也会自动的加上所对应的值。例如设置值为100,执行select * from TESTDB.travelrecord;的效果
    为和执行select * from TESTDB.travelrecord limit 100;相同设置该值的话,MyCat默认会把查询
    到的信息全部都展示出来,造成过多的输出。所以,在正常使用中,还是建议加上一个值,用于减
    少过多的数据返回。当然SQL语句中也显式的指定limit的大小,不受该属性的约束。需要注意的
    是,如果运行的schema为非拆分库的,那么该属性不会生效。需要手动添加limit语句。

  • dataNode:同时存在,指定默认存储节点,比如建表默认会创建到该节点下,对应dataNode下的
    name属性

注意:

逻辑库,与MySQL中的Database(数据库)对应,⼀个逻辑库中定义了所包括的Table。

逻辑表table

既然有逻辑库,就会有逻辑表。在分布式数据库中,对于应用来说,读写数据的表就是逻辑表。逻辑表可以分布在一个或多个分片库中,也可以不分片。

节点主机DataNode

将数据切分后,每个分片节点不一定会独占一台机器,同一台机器上可以有多个分片数据库,这样一个或多个分片节点所在的机器就是节点主机。为了规避单节点主机并发数量的限制,尽量将读写压力高的分片节点均匀地放在不同的节点主机上。

  • name:节点名称,可随意填写
  • dataHost:对应dataHost标签中name属性值
  • database:真实Mysql服务中创建的数据库名称

数据库主机DataHost

数据切分后,每个分片节点(dataNode)不一定都会独占一台机器, 同一机器上面可以有多个分片数据库,这样一个或多个分片节点 (dataNode)所在的机器就是节点主机(dataHost),为了规避单节点主 机并发数限制,尽量将读写压力高的分片节点(dataNode)均衡的放 在不同的节点主机(dataHost)。

1、mysql读写分离集群搭建,要求主从复制至少三台,mycat独立一台

MySQL主从复制:

架构规划192.168.99.116 master 主节点192.168.99.117 slave1 从节点 192.168.99.118 slave2 从节点

mycat配置 192.168.99.119

server.xml
<user name="root"><property name="password">123456</property><property name="schemas">XCZDB</property></user>
schema.xml
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/"><schema name="XCZDB" checkSQLschema="true" sqlMaxLimit="100" dataNode="testNode"></schema><dataNode name="testNode" dataHost="dtHost" database="t4" /><dataHost name="dtHost" maxCon="1000" minCon="10" balance="1" writeType="0" dbType="mysql" dbDriver="native" switchType="-1" slaveThreshold="100"><!-- 心跳检测,检测服务器是否宕机 --><heartbeat>select user()</heartbeat><!--写节点--><writeHost host="hostM1" url="192.168.99.116:3306" user="namida" password="Namida@123"><!--从节点--><readHost host="hostS1" url="192.168.99.117:3306" user="namida" password="Namida@123" /><readHost host="hostS2" url="192.168.99.118:3306" user="namida" password="Namida@123" /></writeHost></dataHost>
</mycat:schema>
cd /usr/local/mycat/bin
mycat console
测试

mycat添加数据

在这里插入图片描述

master数据库(连接名sql)

在这里插入图片描述

slave1:

在这里插入图片描述

slave2

在这里插入图片描述

2、mycat分片规则实现,要求有两个主从集群,一台mycat

​ a、范围分片练习
​ b、取模分片练习
​ c、一致性hash分片练习

架构规划
192.168.99.116 master1 主节点
192.168.99.117 slave1 从节点 
192.168.99.118 master1 主节点
192.168.99.121 slave2 从节点

a、范围分片练习

规则配置

autopartition-long.txt

# range start-end ,data node index
# K=1000,M=10000.
0-500M=0
500M-1000M=1
#1000M-1500M=2
schema.xml
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/"><schema name="XCZDB" checkSQLschema="true" sqlMaxLimit="100" ><table name="test4" dataNode="dn1,dn2" rule="auto-sharding-long" /></schema><dataNode name="dn1" dataHost="dtHost1" database="t4" /><dataNode name="dn2" dataHost="dtHost2" database="t4" /><dataHost name="dtHost1" maxCon="1000" minCon="10" balance="1" writeType="0" dbType="mysql" dbDriver="native" switchType="-1" slaveThreshold="100"><!-- 心跳检测,检测服务器是否宕机 --><heartbeat>select user()</heartbeat><!--写节点--><writeHost host="hostM1" url="192.168.99.116:3306" user="namida" password="Namida@123"><!--从节点--><readHost host="hostS1" url="192.168.99.117:3306" user="namida" password="Namida@123" /></writeHost></dataHost><dataHost name="dtHost2" maxCon="1000" minCon="10" balance="1" writeType="0" dbType="mysql" dbDriver="native" switchType="-1" slaveThreshold="100"><!-- 心跳检测,检测服务器是否宕机 --><heartbeat>select user()</heartbeat><!--写节点--><writeHost host="hostM2" url="192.168.99.118:3306" user="namida" password="Namida@123"><!--从节点--><readHost host="hostS2" url="192.168.99.121:3306" user="namida" password="Namida@123" /></writeHost></dataHost>
</mycat:schema>
测试

mycat写入数据

(5000011,test5)
在这里插入图片描述

查看master2

在这里插入图片描述

b、取模分片练习

修改rule.xml

count 2 代表有2个datanode

<tableRule name="mod-long"><rule><columns>id</columns><algorithm>mod-long</algorithm></rule></tableRule>
……
<function name="mod-long" class="io.mycat.route.function.PartitionByMod"><!-- how many data nodes --><property name="count">2</property></function>

修改配置 文件 schema.xml

 <schema name="XCZDB" checkSQLschema="true" sqlMaxLimit="100" ><table name="test4" dataNode="dn1,dn2" rule="mod-long" /></schema>

mycat添加数据

11,master1
12,master0

在这里插入图片描述

master1中出现12

在这里插入图片描述

master2中出现11

在这里插入图片描述

c、一致性hash分片练习

rule.xml

<tableRule name="sharding-by-murmur"><rule><columns>id</columns><algorithm>murmur</algorithm></rule></tableRule>……
<function name="murmur"class="io.mycat.route.function.PartitionByMurmurHash"><property name="seed">0</property><!-- 默认是0 --><property name="count">2</property><!-- 要分片的数据库节点数量,必须指定,否则没法分片 --><property name="virtualBucketTimes">160</property><!-- 一个实际的数据库节点被映射为这么多虚拟节点,默认是160倍,也就是虚拟节点数是物理节点数的160倍 --><!-- <property name="weightMapFile">weightMapFile</property> 节点的权重,没有指定权重的节点默认是1。以properties文件的格式填写,以从0开始到count-1的整数值也就是节点索引为key,以节点权重值为值。所有权重值必须是正整数,否则以1代替 --><!-- <property name="bucketMapPath">/etc/mycat/bucketMapPath</property> 用于测试时观察各物理节点与虚拟节点的分布情况,如果指定了这个属性,会把虚拟节点的murmur hash值与物理节点的映射按行输出到这个文件,没有默认值,如果不指定,就不会输出任何东西 --></function>

schema.xml

<schema name="XCZDB" checkSQLschema="true" sqlMaxLimit="100" ><table name="test4" dataNode="dn1,dn2" rule="sharding-by-murmur" /></schema>

启动

./mycat console

mycat表test4添加数据

20,test3
21,test33

master1

在这里插入图片描述

master2

在这里插入图片描述
在这里插入图片描述

相关文章:

【mysql数据库】mycat中间件

MyCat 简介 Mycat 是数据库 中间件 。 1、 数据库中间件 中间件 是一类连接软件组件和应用的计算机软件&#xff0c; 以便于软件各部件之间的沟通 。 例子 Tomcat web 中间件 。 数据库 中间件 连接 java 应用程序和数据库 2、 为什么要用 Mycat ① Java 与数据库紧耦合 …...

满帮集团 Eureka 和 ZooKeeper 的上云实践

作者&#xff1a;胡安祥 满帮集团&#xff0c;作为“互联网物流”的平台型企业&#xff0c;一端承接托运人运货需求&#xff0c;另一端对接货车司机&#xff0c;提升货运物流效率。2021 年美股上市&#xff0c;成为数字货运平台上市第一股。根据公司年报&#xff0c;2021 年&a…...

ubuntu中彻底删除mysql (配置文件删除可选)

ubuntu中彻底删除mysql (配置文件删除可选) 对于此类即搜即用的分享文章&#xff0c;也不过多赘述&#xff0c;直接依次按照下面的操作执行即可&#xff1a; 一、删除 mysql 数据文件 sudo rm /var/lib/mysql/ -R二、删除 mysql 配置文件 sudo rm /etc/mysql/ -R三、查看 m…...

根据模板和git commit自动生成日·周·月·季报

GitHub - qiaotaizi/dailyreport: 日报生成器 GitHub - yurencloud/daily: 程序员专用的日报、周报、月报、季报自动生成器&#xff01; config.json: { "Author": "gitname", "Exclude": ["update:", "add:", "…...

matlab GUI界面设计

【实验内容】 用MATLAB的GUI程序设计一个具备图像边缘检测功能的用户界面&#xff0c;该设计程序有以下基本功能&#xff1a; &#xff08;1&#xff09;图像的读取和保存。 &#xff08;2&#xff09;设计图形用户界面&#xff0c;让用户对图像进行彩色图像到灰度图像的转换…...

MyBatis 面试题

一、什么是 Mybatis? 1、Mybatis 是一个半 ORM(对象关系映射)框架,它内部封装了 JDBC,开发时 只需要关注 SQL 语句本身,不需要花费精力去处理加载驱动、创建连接、创建 statement 等繁杂的过程。程序员直接编写原生态 sql,可以严格控制 sql 执行性 能,灵活度高。 …...

C#根据数据量自动排版标签的样例

这是一个C#根据数据量自动排版标签的样例 using System; using System.Collections.Generic; using System.Data.SqlClient; using System.Drawing; using System.Text; using System.Threading; using System.Threading.Tasks; using System.Windows.Forms; using HslCommuni…...

【网络安全】Web安全基础 - 第一节:使用软件及环境介绍

VMware VMware&#xff0c;是全球云基础架构和移动商务解决方案的佼佼者。 VMware可是一个总部位于美国加州帕洛阿尔托的计算机虚拟化软件研发与销售企业呢。简单来说&#xff0c;它就是通过提供虚拟化解决方案&#xff0c;让企业在数据中心改造和公有云整合业务上更加得心应…...

Mac下载docker

先安装homebrew Mac下载Homebrew-CSDN博客 然后输入以下命令安装docker brew install --cask --appdir/Applications docker 期间需要输入密码。输入完等待即可...

k8s_设置dns

配置k8s dns 在 Kubernetes 集群中&#xff0c;CoreDNS 是默认的 DNS 服务器&#xff0c;它负责处理集群内所有的 DNS 请求。 kubectl edit cm coredns -n kube-system (此命令修改coredns 配置) kubectl describe cm coredns -n kube-system&#xff08;此命令查看coredns 配…...

翻译《The Old New Thing》- What a drag: Dragging a virtual file (HGLOBAL edition)

What a drag: Dragging a virtual file (HGLOBAL edition) - The Old New Thing (microsoft.com)https://devblogs.microsoft.com/oldnewthing/20080318-00/?p23083 Raymond Chen 2008年03月18日 拖拽虚拟文件&#xff08;HGLOBAL 版本&#xff09; 现在我们已经对简单的数据…...

SA316系列音频传输模块-传输距离升级音质不打折

SA316是思为无线研发的一款远距离音频传输模块&#xff0c;音频采样率为48K&#xff0c;传输距离可达200M。为了满足更多用户需求&#xff0c;思为无线在SA316基础上进一步增加传输距离推出SA316F30。相比SA316性能&#xff0c;同样其采用48K采样&#xff0c;-96dBm灵敏度&…...

【机器学习】智能选择的艺术:决策树在机器学习中的深度剖析

在机器学习的分类和回归问题中&#xff0c;决策树是一种广泛使用的算法。决策树模型因其直观性、易于理解和实现&#xff0c;以及处理分类和数值特征的能力而备受欢迎。本文将解释决策树算法的概念、原理、应用、优化方法以及未来的发展方向。 &#x1f680;时空传送门 &#x…...

电脑缺少运行库,无法启动程序

在我们使用一些软件的时候&#xff0c;由于电脑缺少一些运行库&#xff0c;导致无法启动应用软件&#xff0c;此时需要我们安装缺少的运行库。 比如当电脑提示&#xff1a; Cannot load library Qt5Xlsx.dll 我们就需要下载C得运行库&#xff0c;以满足软件运行需要。 下载链…...

【计算机软考_初级篇】每日十题2

各位老师大家好&#xff0c;软考对于日常的知识储备和企业中的考试&#xff0c;或者说在校大学生来说&#xff0c;那用处是非常大的&#xff01;&#xff01;那么下面我们进入正题&#xff0c;软考呢是分两种语言&#xff0c;java和C&#xff0c;对于其他语言目前还没&#xff…...

HR人才测评,如何做营销人员岗位素质测评?

营销人员是企业中的重要角色&#xff0c;他们直接负责企业产品或服务的销售和推广&#xff0c;是企业中最直接影响销售业绩的人才之一。因此&#xff0c;营销人员的基本素质测评非常重要&#xff0c;能够有效评估营销人员的能力和潜力&#xff0c;为企业招聘和培养优秀的营销人…...

LabVIEW调用第三方硬件DLL常见问题及开发流程

在LabVIEW中调用第三方硬件DLL时&#xff0c;除了技术问题&#xff0c;还涉及开发流程、资料获取及与厂家的沟通协调。常见问题包括函数接口不兼容、数据类型转换错误、内存管理问题、线程安全性等。解决这些问题需确保函数声明准确、数据类型匹配、正确的内存管理及线程保护。…...

datax实现MySQL数据库迁移shell自动化脚本

datax实现MySQL数据库迁移 &#xff08;1&#xff09;生成python脚本 # codingutf-8 import json import getopt import os import sys import MySQLdb#MySQL相关配置&#xff0c;需根据实际情况作出修改 mysql_host "xxxx" mysql_port "3306" mysql_u…...

PostgreSQL的学习心得和知识总结(一百四十四)|深入理解PostgreSQL数据库之sendTuples的实现原理及功能修改

目录结构 注&#xff1a;提前言明 本文借鉴了以下博主、书籍或网站的内容&#xff0c;其列表如下&#xff1a; 1、参考书籍&#xff1a;《PostgreSQL数据库内核分析》 2、参考书籍&#xff1a;《数据库事务处理的艺术&#xff1a;事务管理与并发控制》 3、PostgreSQL数据库仓库…...

C++数据结构之:链List

摘要&#xff1a; it人员无论是使用哪种高级语言开发东东&#xff0c;想要更高效有层次的开发程序的话都躲不开三件套&#xff1a;数据结构&#xff0c;算法和设计模式。数据结构是相互之间存在一种或多种特定关系的数据元素的集合&#xff0c;即带“结构”的数据元素的集合&am…...

别再手动画甘特图了!用VS Code插件MarkWhen,写几行文本就能生成炫酷时间轴

用MarkWhen在VS Code中打造极简时间轴&#xff1a;告别繁琐拖拽&#xff0c;拥抱文本化项目管理 在数字时代&#xff0c;时间管理和项目规划已经成为每个高效能人士的必修课。无论是开发者跟踪项目里程碑&#xff0c;学生规划学习路径&#xff0c;还是个人记录生活轨迹&#xf…...

ARM Cortex-A72浮点与SIMD寄存器架构详解

1. ARM Cortex-A72高级SIMD与浮点寄存器架构解析在嵌入式系统和高性能计算领域&#xff0c;ARM Cortex-A72处理器以其卓越的能效比和计算性能著称。作为其核心功能模块之一&#xff0c;高级SIMD&#xff08;单指令多数据&#xff09;和浮点运算单元为现代计算密集型应用提供了关…...

第5章 集群初始化

本章说明: 集群初始化是 Kubernetes 部署过程中最核心的一步。本章使用 kubeadm 在 master01 节点上初始化高可用集群控制平面。初始化时需要指定 VIP(192.168.3.59:6443)作为控制平面统一入口,这样后续加入的其他 Master 节点和 Worker 节点都通过 VIP 访问 API Server,…...

Docker 部署 SpringBoot 项目超详细教程

Docker 部署 SpringBoot 项目超详细教程一篇适合新手的 Docker 部署 SpringBoot 实战教程&#xff0c;包含&#xff1a; Docker 安装镜像加速SpringBoot 打包Dockerfile 编写构建镜像容器部署日志查看防火墙开放常见问题解决 图文并茂&#xff0c;保姆级教学。本文假设你已拥有…...

基于CircuitPython与BLE的无线手势鼠标:从传感器到HID设备的实践

1. 项目概述与核心思路想没想过&#xff0c;你手里的那块开发板&#xff0c;除了点灯、读传感器&#xff0c;还能直接变成你电脑的鼠标&#xff1f;不是通过USB线&#xff0c;而是像你的蓝牙耳机一样&#xff0c;无线连接&#xff0c;靠手腕的晃动来控制光标。这个想法听起来有…...

正交设计实战指南:从理论到最优方案验证

1. 正交设计入门&#xff1a;从概念到实战价值 第一次接触正交设计是在五年前的一个电机工艺优化项目上。当时面对12个关键参数、每个参数4-5个水平的选择困境&#xff0c;如果做全面实验需要3125组数据&#xff0c;而项目周期只允许做50组实验。正是正交设计让我们用36组实验…...

Xenia Canary架构解密:如何用即时编译技术复活Xbox 360游戏生态

Xenia Canary架构解密&#xff1a;如何用即时编译技术复活Xbox 360游戏生态 【免费下载链接】xenia-canary Xbox 360 Emulator Research Project 项目地址: https://gitcode.com/gh_mirrors/xe/xenia-canary 在游戏仿真技术领域&#xff0c;突破硬件壁垒实现跨平台游戏…...

《魔兽世界》怀旧服:纳克萨玛斯教官拉苏维奥斯战术详解与实战心得

1. 教官拉苏维奥斯战斗机制解析 教官拉苏维奥斯作为纳克萨玛斯军事区的守门BOSS&#xff0c;其战斗核心在于学员控制循环与仇恨管理的双重考验。这个BOSS战最特别的地方在于&#xff0c;你需要同时应对教官本体的高伤害和四名学员的协同作战。很多团队第一次开荒时容易忽略学员…...

桌面图标混乱终结者:用NoFences免费开源工具实现高效桌面管理

桌面图标混乱终结者&#xff1a;用NoFences免费开源工具实现高效桌面管理 【免费下载链接】NoFences &#x1f6a7; Open Source Stardock Fences alternative 项目地址: https://gitcode.com/gh_mirrors/no/NoFences 还在为杂乱无章的桌面图标而烦恼吗&#xff1f;每天…...

深度解析Digital-Infrastructure:一套全面的数字化基础设施建设知识体系与实践指南

深度解析Digital-Infrastructure&#xff1a;一套全面的数字化基础设施建设知识体系与实践指南 项目概述 Digital-Infrastructure 是一个专注于“数字化基础设施”领域的开源知识库项目。它并非一个具体的软件代码库&#xff0c;而是一个集理论、架构、技术选型、实施路径于一体…...