MyCAT:回顾当年的热潮,探寻这款备受欢迎的数据库中间件的核心特性

news2024/11/26 9:50:13

什么是 MyCAT ?

根据 MyCAT 官网 - http://mycat.io/ 的描述可以知道, MyCAT 是如下的一个东东:

  • 一个彻底开源的,面向企业应用开发的大数据库集
  • 支持事务、ACID、可以替代MySQL的加强版数据库
  • 一个可以视为MySQL集群的企业级数据库,用来替代昂贵的Oracle集群
  • 一个融合内存缓存技术、NoSQL技术、HDFS大数据的新型SQL Server
  • 结合传统数据库和新型分布式数据仓库的新一代企业级数据库产品
  • 一个新颖的数据库中间件产品

总结一下就是: MyCAT 是一款数据库中间件,类似于Tomcat 容器或者相关的 Web 中间件。它主要用于解决数据库相关的问题。

MyCAT 能干什么?为什么要使用它?使用它可以解决什么问题?

  • 用于支持海量数据存储,对海量数据进行分库分表
  • 支持分库分表场景下的分布式事务
  • 对多个数据源进行统一整合
  • 高并发应用场景下,降低请求对单个数据库节点带来的灾难性压力
  • 可以通过数据库中间间层面实现数据库读写分离,使其Java程序与数据库访问解耦

具体更多的特性可以参考 http://mycat.io/ 对MyCAT 特性的介绍。总结下来的一般常用的用途有3个,分别如下:

  • 数据读写分离
  • 数据分片
  • 多数据源整合

MyCAT 是唯一的数据库分库分表的解决方案吗?与其它的数据库中间件有什么区别?

我们来看如下图,图片来源于网络:

9f995aa14c1989c8765be3da83f0a229.jpeg

具体介绍如下:

  1. Cobar 属于阿里 B2B 事业群,始于 2008 年,在阿里服役 3 年多,接管 3000+ 个 MySQL 数据库的 schema,

集 群日处理在线 SQL 请求 50 亿次以上。由于 Cobar 发 起人的离职, Cobar 停止维护。

  1. My cat 是开源社区在阿里 cobar 基础上进行二次开发,解决了 cobar 存在的问题,并且加入了许多新

的功能在其中。青出于蓝而胜于蓝。

  1. OneProxy 基于 MySQL 官方的 proxy 思想利用 c 进行开发的, OneProxy 是一款商业收费的中间件。舍

弃了一些功能,专注在性能和稳定性上。

  1. kingshard 由小团队用 go 语言开发,还需要发展,需要不断完善 。
  2. Vite ss 是 Youtube 生产在使用 架构很复杂。不支持 MySQL 原生协议,使用需要大量改造成本 。
  3. Atlas 是 3 60 团队基于 mysql proxy 改写 ,功能还需完善 ,高并发下不稳定 。
  4. MaxScale 是 mariadb MySQL 原作者维护的一个版本 研发的中间件
  5. MySQLRout e 是 MySQL 官方 Oracle 公司发布的中间件

除了这些之外,我们去github 搜罗了一下,还有如下的一些数据库中间件:

  1. Oceanus - 58同城数据库中间件,github star 数 500+;
  2. SOHU-DBProxy - 是由 搜狐 数据库团队开发维护的一个基于MySQL协议的数据中间层项目。它在MySQL官方推出的MySQL-Proxy 0.8.3版本的基础上, 修改了大量bug,添加了很多功能特性。现在已经在sohu的多个业务线上使用, github star 数 700+;
  3. Cetus是由C语言开发的关系型数据库MySQL的中间件,主要提供了一个全面的数据库访问代理功能。Cetus连接方式与MySQL基本兼容,应用程序几乎不用修改即可通过Cetus访问数据库,实现了数据库层的水平扩展和高可用。 , github star 数 1000+;
  4. Zebra是一个基于JDBC API协议上开发出的高可用、高性能的数据库访问层解决方案,是美团点评内部使用的数据库访问层中间件。github star 数 1500+;

MyCAT作为分库分表中间件的原理是什么?

Mycat收到一条SQL语句时, 首先解析SQL语句涉及的表, 接着查看此表的定义, 如果该表存在分片规则, 则获取SQL语句里分片字段的值, 并匹配分片函数, 得到该SQL语旬对应的分片列表, 然后将SQL语句发送到相应的分片去执行, 最后处理所有分片返回的数据并返回给客户端。 以 select* from Orders where prov=? 语句为例, 查找prov=wuhan, 按照分片函数, wuhan值存放在dnl上, 于是SQL语句被发送到Mysql l , 把DBI上的查询结果返回给用户。 这里使用过阿里巴巴数据源 Druid 的同学不知道有没有发现,在Druid 中有一个叫做 SQLParser 的东东,这个玩意其实就是可以用来对原始的SQL语句,根据SQL语法树,对SQL进行加强改造的一个解析器,如果你们项目中有做过表数据的行权限或者列权限,则用这个Druid 的SQLParser 对所有的SQL 进行拦截改写是一个不错的方案,我之前在做数据权限的时候,参考相关实现时,也发现了MyCAT 中对于SQL的解析和改写也使用的这个,具体可以参考:https://github.com/MyCATApache/Mycat-Server/blob/f929f96a16852869bc9dc63f4c0f192ee02818e0/src/main/java/io/mycat/statistic/stat/UserSqlHighStat.java

MyCAT 入门

对于一款开箱即用的数据库分库分表中间件来说,MyCAT的入门相对简单,只需要按照官方的入门指导一步步往下走即可。

安装

安装之前我们首先准备环境,这里我们以企业中生产使用最多的Centos 7 为示例,进行下面的实操,本次CentOS 7 的内核版本如下:

Linux VM_0_14_centos 3.10.0-862.el7.x86_64

由于 MyCAT 源码是通过 Java 语言进行开发的,因此在我们使用之前,需要先检查自己的CentOS 7 主机具备不具备Java 环境,使用 java-version 进行验证,如果没有安装JDK,则首先需要安装JDK并且配置Java环境变量才阔以,Centos 7 安装Java8 比较容易,只需要如下一行命令即可:

yum -y install java-1.8.0-openjdk

JDK8 安装完毕之后,进行如下验证,没有错误即可:

java -versionopenjdk version "1.8.0_242"

OpenJDK Runtime Environment (build 1.8.0_242-b08)

OpenJDK 64-Bit Server VM (build 25.242-b08, mixed mode)

接下来我们根据官方的入门指导,下载mycat server 包,下载地址为:http://dl.mycat.io/ , 这里我们实验时使用MyCAT 1.6.7.3 release 版本即可,下载 1.6.7.3 release 安装包到自己主机的 /opt 目录下 , 操作命令如下:

cd /opt/ && wget /usr/local/ http://dl.mycat.io/1.6.7.3/20190927161129/Mycat-server-1.6.7.3-release-20190927161129-linux.tar.gz

下载完成之后,我们对mycat 安装包进行解压即可,命令如下:

tar -zxvf Mycat-server-1.6.7.3-release-20190927161129-linux.tar.gz

解压完成之后,我们看到 /opt 目录下有了一个 mycat 目录,我们进入到该目录下,发现它的子目录主要有如下:

├── bin

├── catlet

├── conf

├── lib

├── logs

├── tmlogs

└── version.txt

这里我们进入到conf 目录下,只关注如下的几个配置文件即可,其它的配置文件先不用关心:

server.xml 定义逻辑库,表、分片节点等内容

schema.xml 定义用户以及系统相关变量,如端口等

修改相关配置

为了对用户进行区分,此时,我们先修改 server.xml 中的 root 用户为 mycat,当使用 mycat 用户连接时,就代表我们直连的是 mycat,其它的配置不动,具体修改如下:

<!-- 修改之前的 root 用户为 mycat -->
<user name="mycat" defaultAccount="true">
<property name="password">123456</property>
<property name="schemas">TESTDB</property>

<!-- 表级 DML 权限设置 -->
<!--
<privileges check="false">
<schema name="TESTDB" dml="0110" >
<table name="tb01" dml="0000"></table>
<table name="tb02" dml="1111"></table>
</schema>
</privileges>
-->
</user>
...

</mycat:server>

接下来我们修改 schema.xml

删除 标签间的 表信息 dataNode 标签只留一个 dataHost 标签只留一个 writeHost

<readhost 只留一="" 对,如下:<="" p="" style="box-sizing: border-box;">

<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">

<schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1" />
<dataNode name="dn1" dataHost="host1" database="testdb" />
<dataHost name="host1" maxCon="1000" minCon="10" balance="3"
writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
<heartbeat>select user()</heartbeat>
<!-- can have multi write hosts -->
<writeHost host="hostM1" url="118.25.102.189:3306" user="mycat"
password="123456"></writeHost>
</dataHost>
</mycat:schema>

其中<writehost host="”hostM1”" 表示="" mysql="" 的主数据库,等会我们启动="" mycat="" 之后进行验证读写否可以正常进行操作。<="" p="" style="box-sizing: border-box;">

启动 MyCAT 前验证数据库远程访问情况

在验证之前由于我们的主数据库目前并没有创建mycat 这个用户,我们需要登录到 118.25.102.189:3306 数据库实例进行创建用户,脚本如下:

# 在 118.25.102.189 主机上登录 mysql 服务器mysql -uroot # 登录成功后进行创建用户并授权CREATE USER 'mycat'@'%' IDENTIFIED BY '123456';

开始登陆验证MyCAT登陆

在我们配置并创建完毕MyCAT 用户之后,就可以尝试登陆MyCAT 了, 通过以下方式登陆,进行验证,登陆方式如下:

# 完事之后我们开始尝试登陆MyCAT , mycat 默认的端口为 8066mysql -umycat -h118.26.102.189 -p123456 -P8066

通过上述方式登陆成功后,如下图所示:

f3870d815238e3b0145c64cb0dfb2437.jpeg


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

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

相关文章

银河麒麟你服务x86访问ftp服务器上的文件

打开我的电脑 地址栏输入 ftp地址 可以选择需要的文件复制出来了

PyQt 小程序

设备管理程序 v0.0.1.0, 终于出了一个基础版本,… … 两个字典的键值判断 辛亏用的是Python 这个编码时间大大缩短了

node+vue+mysql后台管理系统

千千博客系统&#xff0c;该项目作为一套多功能的后台框架模板&#xff0c;适用于绝大部分的后台管理系统开发。基于 vue.js&#xff0c;使用 vue-cli3 脚手架&#xff0c;引用 Element UI 组件库&#xff0c;数据库直连mysql方便开发快速简洁好看的组件。 功能包含如下&#…

电子杂志制作不求人:简单易用的工具推荐

​如果你想要制作一份精美的电子杂志&#xff0c;但是又不想花费太多的时间和金钱&#xff0c;也不想求及朋友帮忙制作&#xff0c;那么可以试试这个网站制作电子杂志&#xff0c;展现出的效果跟专业级设计师的效果没什么区别哦 赶快收藏吧-------FLBOOK在线制作电子杂志平台&a…

iOS代码混淆和加固技术详解

目录 摘要&#xff1a; 本文介绍了iOS开发中常用的代码混淆和加固技术&#xff0c;包括数据加密、应用加壳和代码混淆。其中&#xff0c;重点讨论了代码混淆的实现方法和注意事项&#xff0c;并推荐了一些相关的工具和库。 引言 代码混淆和加固 数据加密 应用加壳 代码混…

易基因:细菌微生物基因表达调控表观研究方案|原核三代甲基化+转录组

1、原核甲基化 原核生物中的DNA甲基化 原核生物甲基化为什么基于三代测序&#xff1f; 第三代DNA测序为原核细菌的甲基化和表观遗传的研究开辟了一条新的途径&#xff0c;能够在基因组的水平上获取整个表观遗传的序列信息&#xff0c;绘制全基因组甲基化组。 细菌中DNA甲基化…

使用python中xird进行读取文件以及遇到的报错

由于平日系统导出的文档均为.xls的execel&#xff0c;故本文主要讲如何使用xlrd进行读取表格以及操作过程遇到的报错以及对应解决版本 一、基本使用 准备“成绩表.xlsx”文件&#xff0c;如下&#xff1a; 1、读取文件并获得文件的sheet名字 &#xff08;1&#xff09;代码 …

Python 作为开发语言可以吗?怎么掌握 python 才能提升自己

Python 作为开发语言好吗&#xff1f;怎么掌握 python 才能提升自己&#xff1f;下面就跟小编一起来看看吧&#xff01; 很多朋友都是零基础&#xff0c;在选择编程语言的时候&#xff0c;不知道哪种语言才是适合自己去深入学习的。现在全世界有非常多的 Python 语言用户&…

精美的早安问候语,暖心祝福,开心每一天

1、 美好的祝福&#xff0c;成了清晨的主题。相互问候&#xff0c;是一天的开始。让我们伴着不老的岁月&#xff0c;永远开心快乐。早晨好&#xff01; 2、 心宽似海&#xff0c;百福皆来&#xff0c;世事看淡&#xff0c;内心安然。随缘即福&#xff0c;随遇而安&#xff0…

全局事件总线

全局事件总线 功能&#xff1a;可以解决所有组件之间通信传数据的问题原理&#xff1a;通过一个共享对象&#xff0c;将所有组件全部绑定到对象上&#xff0c;即可通过这个对象实现组件与组件之间的传递数据&#xff0c;而这个共享对象叫做全局事件总线。 如何分清楚谁是发送方…

超级干货 | 一些常用的api接口

在工作或是学习中我们经常会使用到一些api&#xff0c;这些api是该网站用于查询或者是测试的接口。有了它们&#xff0c;我们甚至不需要登录该网站就能完成自己所想的目标。今天我就将一些常用的api进行总结&#xff0c;涵盖各个方面&#xff0c;大家需要的时候翻阅使用就可以了…

易云维智慧工业云平台助力广西国企培育数字产业化平台,打造数字化产业生态

2022年6月6日&#xff0c;广西壮族自治区人民政府国有资产监督管理委员会出台了《国有企业数字化转型工作实施意见》&#xff0c;明确了总体要求、主要目标、重点推进国有企业数字化转型的任务和保障措施。 《意见》预计&#xff0c;到2025年底&#xff0c;广西基本实现自治区级…

数据加密中,采用密钥管理系统相比加密机的好处

密钥管理系统与加密机都能提供数据加解密&#xff0c;那么针对具体的应用加密&#xff0c;采用密钥管理系统比单纯使用加密机有哪些优点&#xff0c;列表如下&#xff1a; 集中化管理&#xff1a;密钥管理系统可以对加密算法和密钥进行集中化管理&#xff0c;使得企业可以对加…

宁夏企业过等保选哪家测评机构好?选哪家堡垒机好?

最近不少宁夏小伙伴在问&#xff0c;宁夏企业过等保选哪家测评机构好&#xff1f;选哪家堡垒机好&#xff1f;今天我们小编就给大家来简单说说哈&#xff01; 宁夏企业过等保选哪家测评机构好&#xff1f; 目前宁夏正规具有资质的等保测评机构只有3家&#xff0c;分别为中电信…

虹科分享丨DevOps 是否已死?AI 和大语言模型给云计算和 DevOps 带来了哪些影响?

来源&#xff1a;虹科云科技虹科分享丨DevOps 是否已死&#xff1f;AI 和大语言模型给云计算和 DevOps 带来了哪些影响&#xff1f;云计算创新已经从革命性阶段过渡到了进化性阶段&#xff0c;重点在于迁移和重构工作负载。https://mp.weixin.qq.com/s/mx67vqxoEoMLMrbvE-D8_w …

光耦合器:6N136和6N137之间的差异

光耦合器也称为光隔离器&#xff0c;通过在输入和输出电路之间提供电气隔离&#xff0c;在电子电路中发挥着关键作用。业界常用的两种光耦合器6N136和6N137。本文深入研究了这些组件的技术方面&#xff0c;重点介绍了它们的主要差异和应用。 光耦合器概述 光耦合器是能够在两…

计算机网络中常见缩略词翻译及简明释要

强烈推荐OSI七层模型和TCP/IP四层模型,借用一下其中图片&#xff0c;版权归原作者 SW: 集线器&#xff08;Hub&#xff09;、交换机&#xff08;SW&#xff09;、路由器&#xff08;router&#xff09;对比区别 集线器是在物理层; 交换机&Mac地址是在数据链路层(Mac物理地址…

【LeetCode: 67. 二进制求和 | 位运算 】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

power point导出pdf保留字体

在 slides 中用到非自带的字体&#xff0c;如 [1]&#xff0c;想导出成 pdf 文件&#xff08;因为导出成图&#xff0c;如 png&#xff0c;放大会蒙&#xff09;&#xff0c;并在别人电脑里也保留字体。除了让别人也装上相应字体&#xff0c;可以&#xff1a; 参考 [2]&#x…

探秘网页打开的完整过程:DNS解析、CDN加速和Nginx负载均衡的协同驱动

浅谈一个网页打开的全过程&#xff08;涉及DNS、CDN、Nginx负载均衡等&#xff09; 1、概要 从用户在浏览器输入域名开始&#xff0c;到web页面加载完毕&#xff0c;这是一个说复杂不复杂&#xff0c;说简单不简单的过程&#xff0c;下文暂且把这个过程称作网页加载过程。下面…