mycat 是分库分表的中间件,同学们可以参照做一下 demo,初步的理解的和了解分库分表。
1.什么是 MYCAT
一个彻底开源的,面向企业应用开发的大数据库集群
支持事务、ACID、可以替代 MySQL 的加强版数据库
一个可以视为 MySQL 集群的企业级数据库,用来替代昂贵的 Oracle 集群
一个融合内存缓存技术、NoSQL 技术、HDFS 大数据的新型 SQL Server
结合传统数据库和新型分布式数据仓库的新一代企业级数据库产品
一个新颖的数据库中间件产品
2.关键特性
支持 SQL92 标准
支持 MySQL、Oracle、DB2、SQL Server、PostgreSQL 等 DB 的常见 SQL 语法
遵守 Mysql 原生协议,跨语言,跨平台,跨数据库的通用中间件代理。
基于心跳的自动故障切换,支持读写分离,支持 MySQL 主从,以及 galera cluster 集群。
支持 Galera for MySQL 集群,Percona Cluster 或者 MariaDB cluster
基于 Nio 实现,有效管理线程,解决高并发问题。
支持数据的多片自动路由与聚合,支持 sum,count,max 等常用的聚合函数,支持跨库分页。
支持单库内部任意 join,支持跨库 2 表 join,甚至基于 caltlet 的多表 join。
支持通过全局表,ER 关系的分片策略,实现了高效的多表 join 查询。
支持多租户方案。
支持分布式事务(弱 xa)。
支持 XA 分布式事务(1.6.5)。
支持全局序列号,解决分布式下的主键生成问题。
分片规则丰富,插件化开发,易于扩展。
强大的 web,命令行监控。
支持前端作为 MySQL 通用代理,后端 JDBC 方式支持 Oracle、DB2、SQL Server 、 mongodb 、巨杉。
支持密码加密
支持服务降级
支持 IP 白名单
支持 SQL 黑名单、sql 注入攻击拦截
支持 prepare 预编译指令(1.6)
支持非堆内存(Direct Memory)聚合计算(1.6)
支持 PostgreSQL 的 native 协议(1.6)
支持 mysql 和 oracle 存储过程,out 参数、多结果集返回(1.6)
支持 zookeeper 协调主从切换、zk 序列、配置 zk 化(1.6)
支持库内分表(1.6)
集群基于 ZooKeeper 管理,在线升级,扩容,智能优化,大数据处理(2.0 开发版)
3.优势
基于阿里开源的 Cobar 产品而研发,Cobar 的稳定性、可靠性、优秀的架构和性能以及众多成熟的使用案例使得 MYCAT 一开始就拥有一个很好的起点,站在巨人的肩膀上,我们能看到更远。业界优秀的开源项目和创新思路被广泛融入到 MYCAT 的基因中,使得 MYCAT 在很多方面都领先于目前其他一些同类的开源项目,甚至超越某些商业产品。
MYCAT 背后有一支强大的技术团队,其参与者都是 5 年以上软件工程师、架构师、DBA 等,优秀的技术团队保证了 MYCAT 的产品质量。
MYCAT 并不依托于任何一个商业公司,因此不像某些开源项目,将一些重要的特性封闭在其商业产品中,使得开源项目成了一个摆设。
4.结构
个人理解:mycat 本身虚拟成了一个 mysql 服务,我们可以直接调用,当我们操作 mycat 服务时,mycat 会按照配置操作 mysql 服务。
5.下载和安装
进入官网http://www.mycat.io/
楼主这里使用的事 windows 版。下载后是一个,直接解压就可以了。
6.配置修改
1.server.xml
<user name="root"> <property name="password">123456</property> <property name="schemas">TESTDB</property> <!-- 表级 DML 权限设置 --> <!-- <privileges check="false"> <schema name="TESTDB" dml="0110" > <table name="tb01" dml="0000"></table> <table name="tb02" dml="1111"></table> </schema> </privileges> --> </user>
<user name="user"> <property name="password">user</property> <property name="schemas">TESTDB</property> <property name="readOnly">true</property> </user>
复制代码
配置的是 mycat 作为服务区,对外的服务名,密码,(和 mysql 的服务器名,和密码概念相同) 。默认的端口号为 8066,如果不想改数据库名,此类不用我们修改。
2.wrapper.conf
#********************************************************************# Wrapper Properties#********************************************************************# Java Applicationwrapper.java.command=C:\Program Files\Java\jdk1.8.0_144wrapper.working.dir=..
# Java Main class. This class must implement the WrapperListener interface# or guarantee that the WrapperManager class is initialized. Helper# classes are provided to do this for you. See the Integration section# of the documentation for details.wrapper.java.mainclass=org.tanukisoftware.wrapper.WrapperSimpleAppset.default.REPO_DIR=libset.APP_BASE=.
复制代码
wrapper.java.command=C:\Program Files\Java\jdk1.8.0_144 改为 jdk 路径
3.schema.xml
<?xml version="1.0"?><!DOCTYPE mycat:schema SYSTEM "schema.dtd"><mycat:schema xmlns:mycat="http://io.mycat/"> <!-- name:server中配置的mycat服务名 --> <schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100"> <!-- name:表名 datanode 是数据库别名 意思是 dn1,dn2中的user表 在mycat服务中生成,所以需要在datanode中的数据库都需要有user表 rule则是分片策略 而mod-long为分片策略--> <table name="user" primaryKey="id" autoIncrement="true" dataNode="dn1,dn2" rule="mod-long" /> </schema>
<!-- dn1 dn2对应着上面配置的datanode datahost是下面配置数据源的别名 database:l连接到的mysql服务的test数据库 --> <dataNode name="dn1" dataHost="localhost1" database="test" /> <dataNode name="dn2" dataHost="localhost2" database="test" />
<!-- name对应着上面 datehost中配置 指定datahost的数据源 --> <dataHost name="localhost1" maxCon="1000" minCon="10" balance="0" writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100"> <heartbeat>select user()</heartbeat> <!-- can have multi write hosts --> <writeHost host="hostM1" url="localhost:3306" user="root" password="root"> </writeHost> </dataHost> <dataHost name="localhost2" maxCon="1000" minCon="10" balance="0" writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100"> <heartbeat>select user()</heartbeat> <!-- can have multi write hosts --> <writeHost host="hostS2" url="192.168.2.134:3306" user="root" password="123"> </writeHost> </dataHost></mycat:schema>
复制代码
4.rule.xml
此处划重点!一定要去 rule 中取查看自己配置的策略,安装后自带配置的为<property name="count">3</property>
但是如果你 mysql 服务只有 2 个就会报错,所以每次配置时,来 rule.xml 中看看配置的数量和你数据库服务数量是否能对上。
然后启动服务,双击 bin 文件夹下的 startup_nowrap.bat。
如果出现以上信息,则启动成功。
评论