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 Application
wrapper.java.command=C:\Program Files\Java\jdk1.8.0_144
wrapper.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.WrapperSimpleApp
set.default.REPO_DIR=lib
set.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。
如果出现以上信息,则启动成功。
评论