MyCAT 可以视为“MySQL”集群的企业级数据库,用来替代昂贵的Oracle集群,其背后是阿里曾经开源的知名产品Cobar。MyCAT的目标是:低成本的将现有的单机数据库和应用平滑迁移到“云”端,解决数据存储和业务规模迅速增长情况下的数据瓶颈问题。
MyCat可以做的事情很多,它是一款遵守Mysql原生协议,跨语言,跨平台,跨数据库的通用中间件代理。它可以实现基于心跳的自动故障切换,支持读写分离,支持MySQL主从。支持数据的多片自动路由与聚合,支持sum,count,max等常用的聚合函数,支持跨库分页。支持通过全局表,ER关系的分片策略,实现了高效的多表join查询。支持多租户方案。支持分布式事务(弱xa)。
MyCat可以做的事情很多,它是一款遵守Mysql原生协议,跨语言,跨平台,跨数据库的通用中间件代理。它可以实现基于心跳的自动故障切换,支持读写分离,支持MySQL主从。支持数据的多片自动路由与聚合,支持sum,count,max等常用的聚合函数,支持跨库分页。支持通过全局表,ER关系的分片策略,实现了高效的多表join查询。支持多租户方案。支持分布式事务(弱xa)。
强大的web,命令行监控。支持前端作为mysq通用代理,后端JDBC方式支持Oracle、DB2、SQL Server 、 mongodb 、巨杉。支持SQL黑名单、sql注入攻击拦截。支持分表(1.6)。集群基于ZooKeeper管理,在线升级,扩容,智能优化,大数据处理。
上面都是我从官网上抄的,并没有真正的理解透彻- -
简单来说,mycat负责和数据库进行交互,我们编程针对mycat编程,这样对开发人员来说,并没有感觉到有一层mycat来作为了中间件。
mycat的安装非常简单,我们只需要配置几个配置文件然后启动它就行了。
下载解压就不说了,去官网下吧。修改conf文件夹中的server.xml,这个xml配置的是类似mysql的一些配置,比如用户,默认sql解析器,等等,如果把mycat当做数据库的话,这里就是对数据库的配置。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mycat:server SYSTEM "server.dtd">
<mycat:server xmlns:mycat="http://org.opencloudb/">
<system>
<property name="defaultSqlParser">druidparser</property>
<property name="useCompression">1</property>
<!--1为开启mysql压缩协议-->
</system>
<user name="root">
<!-- 用户名 -->
<property name="password">root</property>
<!-- 密码 -->
<property name="schemas">mysqlcluster</property>
<!-- 这个用户使用的schema -->
</user>
<user name="itoo">
<property name="password">itoo</property>
<property name="schemas">mysqlcluster</property>
<property name="readOnly">true</property>
<!-- 只有读的权限 -->
</user>
</mycat:server>
我这里只配置了俩用户,反正是为了测试,就一个读一个可写。
然后修改schema.xml,这个xml配置的是真正的mysql数据库的地址和节点,节点是用来分库分表的我这里就没有配置。
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://org.opencloudb/" >
<schema name="mysqlcluster" checkSQLschema="false" sqlMaxLimit="100" dataNode="cluster"/>
<!-- 这个Schema的基本信息 -->
<dataNode name="cluster" dataHost="cluster" database="clustertest" />
<!-- dataNode用于分库分表,这里暂时没有使用 -->
<dataHost name="cluster" maxCon="1000" minCon="10" balance="3"
writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
<!-- 配置mysql的基本信息,相当于咱们java程序中的jdbc.properties里面的内容 -->
<!-- balance="3" 表示启动读写分离,写请求写入下面的writeHost,读请求传给readHost -->
<heartbeat>select user()</heartbeat>
<!-- 这里可以配置多个writeHost -->
<writeHost host="master1" url="192.168.22.219:3306" user="root" password="root">
<readHost host="slave" url="192.168.22.219:3307" user="root" password="root" />
</writeHost>
</dataHost>
</mycat:schema>
最后还有一个rule.xml,这个xml是分库分表的规则,我暂时没有研究,就算了。
然后启动mycat服务,进入mycat的bin目录,直接mycat start就可以了。
启动成功之后就可以使用navicat连接了,默认端口是8066,用户名密码是上面server.xml里面配置的。