概述:Mycat的架构其实很好理解,Mycat是代理,Mycat后面就是物理数据库。和Web服务器的Nginx类似。对于使用者来说,访问的都是Mycat,不会接触到后端的数据库Mycat没有实现主从复制的功能,毕竟数据库本身自带的这个功能才是最高效稳定的。
通过配置以下三个文件,设定mycat配置:
文件 | 说明 |
---|---|
server.xml | Mycat的配置文件,设置账号、参数等 |
schema.xml | Mycat对应的物理数据库和数据库表的配置 |
rule.xml | Mycat分片(分库分表)规则 |
表示外界连接mycat的信息。连接的默认端口时8066,以下连接的信息时用户名:root,密码:l2532390K, 端口8066,
也可以设置相应的用户权限,可以建多用户。
配置实际数据库,这里只做读写的分库,但是要配合数据库自带的主从数据库写功能。读写分离原理:通过将写数据请求负载到不同的主数据库,不同主数据库之间要做主从复制功能,从数据库和主数据库也要做主从功能。通过将数据写入主数据库,后利用数据库自带主从读写功能,将数据写入不同的主数据库和从数据库,保证所有主数据库之间和所有分数据库数据一致。读数据是,通过将每次的请求均衡负载到分数据库进行读取数据。
这里也可以设置一个写数据库作为主数据库,多个读数据库做为从数据库,比较请求数据量远远大于写的数据量。
注释:schema中可以整体数据库配置,也可以单独的表进行配置如:
但官网给出的是,单独表进行配置。
注释:dn1分库种类在schema中使用。dataHost是下面实体数据库中配置分类,每个dataHost都可以配置自己的读写实体数据库。database是表示数据库中的具体数据库,有多个数据库使用逗号隔开。
注释:balance="1"的话,表示读写分离。表示需要关联的数据库名称,name="TESTDB" 中TESTDB需要与server.xml中设置数据库名称相同。select 1保持心跳语句。对写数据库这块还需要进一步测试,很多同学数mycat没有实现主从数据库数据复制,所以还是要设置主从数据库进行数据库数据复制。
分片的规则,主要关注rule属性,rule属性的内容来源于rule.xml这个文件,Mycat支持10种分表分库的规则,基本能满足你所需要的要求,这个必须赞一个,其他数据库中间件好像都没有这么多。目前未做分片,暂时未用到。
注释:
当规则需要修改时,比如please make sure table datanode size = function partition size时,需要修改对于的规则autopartition-long.txt删除一个节点即可。当然规则可以根据自己的需要进行修改。
分库:上面样例中已经做了数据的读写分库
分表:由于数据库之间读写信息具有一定延时,所有原则上不建议分表,容易造成数据丢失。
1、源码调试,在官网下载源码后,引进eclipse后,找到MycatStartup.java文件,左键-》Run As -》Java Application运行即可。
2、源码调试好后,将rule.xml,server.xml,schame.xml存放到官方编译好的mycat工具包中,部署工具包即可。
3、在windows中如果出现闪退,直接运行startup_nowrap.bat,如果出现闪退,在cmd 命令行运行,查看出错原因。
应用工程中连接mycat中间级与直接连接mysql是一样的,如下:
jdbc:mysql://127.0.0.1:8066/TESTDB?useUnicode=true&characterEncoding=utf-8
userName=root
password=l2532390K
到mycat/bin文件夹下:
./mycat start
注意事项:
1、Mycat主从分离只是在读的时候做了处理,写入数据的时候,只会写入到writehost,需要通过mysql的主从复制将数据复制到readhost,这个问题当时候我纠结了好久,数据写入writehost后,readhost一直没有数据,以为是自己配置的问题,后面才发现Mycat就没有实现主从复制的功能,毕竟数据库本身自带的这个功能才是最高效稳定的。以上是网络获取的经验,未经证实。参考了:https://www.cnblogs.com/chongaizhen/p/11083226.html。