1、MyCat概述 

    从定义和分类来看,它是一个开源的分布式数据库系统,是一个实现了MySQL协议的Server,前端用户可以把它看做是一个数据库代理,用MySQL客户端工具和命令行访问,而其后端可以用MySQL原生(Native)协议与多个MySQL服务器通信,也可以用JDBC协议与大多数主流数据库服务器通信,其核心功能是读写分离、数据分片(垂直拆分分库、水平拆分分表、垂直拆分+水平拆分)和多数据源整合。 

    Mycat发展到目前版本,已经不在是一个单纯的MySQL代理了,它的后端可以支持MySQL、SQL Server、Oracle、DB2、PostgreSQL等主流数据库,也支持MongoDB、NOSQL方式等存储,未来还会支持更多类型的存储。而在最终用户看来,无论是那种存储方式,在Mycat里,都是一个传统的数据库表,支持标准的SQL语句进行数据的操作,这样一来,对前端业务系统来说,可以大幅度降低开发难度,提升开发速度,在测试阶段,可以将一表定义为任何一种Mycat支持的存储方式,比如MySQL的MyASM表、内存表、或者MongoDB、LeveIDB以及号称是世界上最快的内存数据库MemSQL上。

2、用途&环境介绍 

  • 单纯的读写分离,此时配置最为简单,支持读写分离,主从切换。
  • 分表分库,对于超过1000万的表进行分片,最大支持1000亿的单表分片。
  • 多租户应用,每个应用一个库,但应用程序只连接Mycat,从而不改造程序本身,实现多租户化。
  • 报表系统,借助于Mycat的分表能力,处理大规模报表的统计。
  • 代替Hbase,分析大数据。
  • 询的记录需要在3秒内查询出来结果, 除了基于主键的查询,还可能存在范围查询或其他属性查询,此时Mycat可能是最简单有效的选择。
  • 该实现需要先完成MySQL的主从复制的相关复制结构操作。才能进行下一步操作。主从复制的相关内容,参考《【MySQL专题】02、性能优化之主从复制》。

    PS:本地服务器采用的主从复制结构模式为一主一从的复制结构
  • Master:192.168.202.128
  • Slave:192.168.202.129
  • Mycat:192.168.202.130

3、安装MyCat 

  • JDK安装&配置文档:

    参考:文档Linux -Centos  常见配置(静态IP、YUM... 

    链接:http://note.youdao.com/noteshare?id=f2d067e276add283a4db09e5536ff5c9&sub=WEB1e60f94040bd9e345cb536fbd846c9c9 
  • Mycat安装
  • 下载Mycat
  • 解压&环境变量

        解压mycat,根据自己部署规则,本人选择将mycat部署在/usr/local/目录下 ,所以我解压mycat后,移动mycat 到/usr/local/目录下,由于为了方便我们日常管理mycat,对其进行环境变量配置,分别需要执行如下命令操作。(这里就不展示命令的执行过程呢)
  • Mycat配置

        在配置mycat之前,我们需要在mysql主复制节点mysql-master节点上,创建两个mysql用户,用于mysql数据的写入和读。(y由于mysql数据库刚安装,默认mysql的root账号密码为空,所以这里登陆就不需要密码登陆,若需要管理root账号,可以详细去配置root账号的安全权限问题,这里就不一一介绍呢),登陆成功后,执行相应的账号的创建、授权等(注意:生产环境要尽量减少权限,注意安全问题)



        接下来,我们进入主题,mycat的文件配置。首先介绍一下mycat的目录结构(如果缺失tree命令,可以通过yum install tree -y 进行安装,这里不详细介绍,本文核心是介绍mycat部署):



    conf目录下存放的配置文件

    server.xml是Mycat服务器参数调整和用户授权的配置文件 
       schema.xml是逻辑库定义和表以及分片定义的配置文件,rule.xml是分片规则的配置文件, 分片规则的具体一些参数信息单独存放为文件,也在这个目录下,配置文件修改,需要重启mycat或者通过9066端口reload。 

    lib目录下主要存放mycat依赖的一些jar文件。

    logs:日志存放在logs/mycat.log中,每天一个文件


    日志配置是在conf/log4.xml中,根据自己的需要可以调整输出级别. 

      注意:Linux下部署安装MySQL,默认不忽略表名大小写,需要手动到/etc/my.cnf 下配置 lower_case_table_names=1 使Linux环境下MySQL忽略表名大小写,否则使用MyCAT的时候会提示找不到表的错误! 

    配置核心server.xml 和 schema.xml文件,配置详情分别如下(本文档介绍的是基础版的mycat运用,若需要更深程度的使用,可以深度研究 mycat相关知识或者持续关注文档更新):

    mysql 表单过大 冷热数据分离技术解决方案_xml

    mysql 表单过大 冷热数据分离技术解决方案_性能优化_02

    mysql 表单过大 冷热数据分离技术解决方案_mysql_03

    mysql 表单过大 冷热数据分离技术解决方案_xml_04



    关于schema.xml文件部分参数说明,不同参数配置,代表mycat采取的机制策略不一样: 

    mysql 表单过大 冷热数据分离技术解决方案_性能优化_05

4、启动MyCat 

由于我们配置了mycat的环境变量,所以可以直接使用mycat命令操作:


mysql 表单过大 冷热数据分离技术解决方案_性能优化_06

直接执行mycat命令可以看出,mycat提供了 指定相关命令操作,服务器的启动、停止,重启等具体命令操作,这里我们需要启动mycat,直接执行mycat  start 即可。 

5、验证 

通过刚创建两个账号,在第三方工具连接mycat,若能成功,表示配置完成; 

mysql 表单过大 冷热数据分离技术解决方案_数据库_07

6、思考 

  • Mycat 如何进行高可用服务架构搭建?
  • Mycat中间件宕机如何维护?
  • Mycat 中间件的另一特性--数据拆分如何实现?
  • Mycat 中间件如何多语言?
  • Mycat 中间件的运行原理和实现原理?