上篇文章《MyCat 启蒙:分布式系统的数据库架构演变》中,咱们经过一个项目从零到百万级访问的变化,展现了这个过程当中的数据层架构变化。其中说到了数据层架构变化所带来的三个问题:css
而 MyCat 最初就是为了解决这个问题而存在的,它能集中管理项目涉及到的全部数据库链接,减小项目中非业务性代码的编写。了解了 MyCat 的诞生背景,咱们此次就上手用一用这个框架。html
话很少说,咱们先经过一个简单的例子让 MyCat 跑起来。mysql
提示:运行 MyCat 服务器须要安装 JDK 和 MySQL,请确保你的服务器上已经正确安装。算法
完成环境确认后,到 MyCat 官网下载 MyCat 的服务器包。MyCat 针对不一样系统提供了不一样的安装包,我这边下载的是 1.6.RELEASE 版本的 Mac 安装包。sql
下载完成后解压进入 bin 目录,运行下面的命令运行 MyCat 服务器:数据库
查看 MyCat 安装包目录下的 logs/wrapper.log
日志,若是没有报错,那就是启动成功了。服务器
MyCat 安装包默认为咱们提供了有读写权限的帐号,帐号名为 root,密码是 123456。架构
下面咱们直接用这个默认帐号在命令行上链接 MyCat。(注意⚠️:app
(我这里用的是MAMP自带的mysql)框架
Mini:bin lu$ /Applications/MAMP/Library/bin/mysql -uroot -proot -h127.0.0.1 -P8066
)。
能够看到咱们已经成功连上了 MyCat 服务器。MyCat 服务器默认定义了一个名为 TESTDB 的逻辑数据库,而且也在该逻辑数据库中定义了一些逻辑表。
但当你尝试作一些 select 操做的时候,控制台会提示报错,这是由于 MyCat 配置错误致使的。
若是咱们要使用 MyCat 正确执行 select 语句的话,咱们须要在 MySQL 中先建立三个数据库,分别是:db一、db二、db3。
建立完成以后再建立 travelrecord 表。
最后在 schema.xml 中保留一个 DataHost 节点:
最后重启 MyCat 服务器:
以后链接 MyCat
链接成功后尝试运行相应的 SQL 语句:
到这里,咱们已经学会最基本的 MyCat 服务器启动以及配置了。
打开 MyCat 的目录,咱们能够看到 MyCat 主要包括了如下几个文件夹:
其中 bin 目录是 MyCat 的启动目录,conf 目录是 MyCat 的配置文件目录,lib 目录是 MyCat 自身的 Jar 包以及所依赖 Jar 包的目录,logs 目录是日志目录。
在这 MyCat 的目录中,最重要的是 conf 目录,这里面存放了 MyCat 全部的配置信息。在 conf 目录中有三个重要的配置文件:schema.xml、server.xml、rule.xml。
schema.xml 文件定义了 MyCat 到底链接那个数据库实例,链接这个数据库实例的哪一个数据库。MyCat 一共有几个逻辑数据库,MyCat 一共有几个逻辑表。
schema.xml 文件一共有四个配置节点:DataHost、DataNode、Schema、Table。
DataHost 节点定义了 MyCat 要链接哪一个 MySQL 实例,链接的帐号密码是多少。默认的 MyCat 为咱们定义了一个名为 localhost1 的数据服务器(DataHost),它指向了本地(localhost)3306 端口的 MySQL 服务器,对应 MySQL 服务器的帐号是 root,密码是 123456。
DataNode 节点指定了须要链接的具体数据库名称,其使用一个 dataHost 属性指定该数据库位于哪一个数据库实例上。默认的 MyCat 为咱们建立了三个数据节点(DataNode),dn1 数据节点对应 localhost1 数据服务器上的 db1 数据库,dn2 数据节点对应 localhost1 数据服务器上的 db2 数据库,dn1 数据节点对应 localhost1 数据服务器上的 db3 数据库。
Schema 节点定义了 MyCat 的全部逻辑数据库,Table 节点定义了 MyCat 的全部逻辑表。默认的 MyCat 为咱们定义了一个名为 TESTDB 的逻辑数据库,在这个逻辑数据库下又定义了名为 travaelrecord、company 等 6 个逻辑表。
因此上面当咱们登录 MyCat 输入show databases
会看到只有一个名为 TESTDB 的数据库,这个就是 MyCat 的逻辑数据库。
咱们输入show tables
能够看到 TESTDB 下对应的逻辑表。
server.xml 定义了项目中链接 MyCat 服务器所须要的帐号密码,以及该帐号能访问那些逻辑数据库。 server.xml 配置文件中有 System 和 User 两个配置节点。
System 节点定义了链接 MyCat 服务器的系统配置信息。例如是否开启实时统计功能,是否开启全加班一致性检测等。
User 配置节点定义了链接 MyCat 服务器的帐号密码,以及该帐号密码所能进行的数据库操做。默认的 MyCat 为咱们建立了一个帐户名为 root,密码为 123456 的帐号,只能访问 TESTDB 逻辑数据库,而且定义了对相关表的操做权限。
rule.xml 定义了逻辑表使用哪一个字段进行拆分,使用什么拆分算法进行拆分。rule.xml 中有两个配置节点,分别是:TableRule 和 Function 配置节点。
TableRule 配置节点定义了逻辑表的拆分信息,例如使用哪一个字段进行拆分,使用什么拆分算法。默认的 MyCat 为咱们配置了一个名为 rule2 的表拆分规则,表示根据 user_id 字段进行拆分,拆分算法是 func1。
Function 配置节点则定义了具体的拆分算法。例如使用对 1000 取余的拆分算法,对 100 取余的拆分算分等等。默认的 MyCat 为咱们定义了一个名为 func1 的拆分算法,这个拆分算法定义在 o.mycat.route.function.PartitionByLong 类中,而且还传入了两个参数值。