什么是 MyCAT ?
根据 MyCAT 官网 - http://mycat.io/ 的描述可以知道, MyCAT 是如下的一个东东:
总结一下就是: MyCAT 是一款数据库中间件,类似于Tomcat 容器或者相关的 Web 中间件。它主要用于解决数据库相关的问题。
具体更多的特性可以参考 http://mycat.io/ 对MyCAT 特性的介绍。总结下来的一般常用的用途有3个,分别如下:
我们来看如下图,图片来源于网络:
具体介绍如下:
集 群日处理在线 SQL 请求 50 亿次以上。由于 Cobar 发 起人的离职, Cobar 停止维护。
的功能在其中。青出于蓝而胜于蓝。
弃了一些功能,专注在性能和稳定性上。
除了这些之外,我们去github 搜罗了一下,还有如下的一些数据库中间件:
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的入门相对简单,只需要按照官方的入门指导一步步往下走即可。
安装之前我们首先准备环境,这里我们以企业中生产使用最多的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-openjdkJDK8 安装完毕之后,进行如下验证,没有错误即可:
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,其它的配置不动,具体修改如下:
...
接下来我们修改 schema.xml
删除 标签间的 表信息 dataNode 标签只留一个 dataHost 标签只留一个 writeHost
其中
在验证之前由于我们的主数据库目前并没有创建mycat 这个用户,我们需要登录到 118.25.102.189:3306 数据库实例进行创建用户,脚本如下:
# 在 118.25.102.189 主机上登录 mysql 服务器mysql -uroot # 登录成功后进行创建用户并授权CREATE USER 'mycat'@'%' IDENTIFIED BY '123456';在我们配置并创建完毕MyCAT 用户之后,就可以尝试登陆MyCAT 了, 通过以下方式登陆,进行验证,登陆方式如下:
# 完事之后我们开始尝试登陆MyCAT , mycat 默认的端口为 8066mysql -umycat -h118.26.102.189 -p123456 -P8066通过上述方式登陆成功后,如下图所示: