高级Spring Boot---使用mycat 分库分表

什么是mycat

       2013年阿里的Cobar在社区使用过程中发现存在一些比较严重的问题,及其使用限制,经过Mycat发起人第一次改良,第一代改良版——Mycat诞生。 Mycat开源以后,一些Cobar的用户参与了Mycat的开发,最终Mycat发展成为一个由众多软件公司的实力派架构师和资深开发人员维护的社区型开源软件。

  • 一个彻底开源的,面向企业应用开发的大数据库集群

  • 支持事务、ACID、可以替代MySQL的加强版数据库

  • 一个可以视为MySQL集群的企业级数据库,用来替代昂贵的Oracle集群

  • 一个融合内存缓存技术、NoSQL技术、HDFS大数据的新型SQL Server

  • 结合传统数据库和新型分布式数据仓库的新一代企业级数据库产品

  • 一个新颖的数据库中间件产品

关键特性

  • 支持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 、 odb 、巨杉。

  • 支持密码加密

  • 支持服务降级

  • 支持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开发版)。

安装

官网下载: http://www.mycat.io/

下载1.6的正式版

image.png

下载后解压,cmd超级管理员模式进入mycat\bin 目录,执行安装命令

mycat install

image.png

安装完成,启动mycat mycat start

启动过程中如果报错,可查看日志文件,查看错误原因

image.png
image.png

一般情况下有两种错误,需要将conf\wrapper.conf 文件中的wrapper.java.command改为jdk的安装目录。

wrapper.java.command=D:\Program Files (x86)\Java\jdk1.8.0_131\bin\java.exe

将虚拟内存改小

image.png

mycat 使用场景一---全局表

第一步,打开conf\ Schema.Xml 的配置文件

    <schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100">
        
        <table name="users" primaryKey="ID" type="global" dataNode="dn1,dn2" />
        
    </schema>
    <dataNode name="dn1" dataHost="mysql01" database="test01" />
    <dataNode name="dn2" dataHost="mysql02" database="test02" />
    <dataHost name="mysql01" maxCon="1000" minCon="10" balance="0"
              writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
        <heartbeat>select user()</heartbeat>

        <writeHost host="host01" url="localhost:3306" user="root"
                   password="123456">
        </writeHost>
    </dataHost>
    <dataHost name="mysql02" maxCon="1000" minCon="10" balance="0"
              writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
        <heartbeat>select user()</heartbeat>
        <writeHost host="host02" url="localhost:3306" user="root"
                   password="123456">
        </writeHost>
    </dataHost>

用Navicat for MySQL 连接mycat ,mycat 的连接方式跟mysql一致。

默认端口为8066,用户名:root,密码:123456

当我们往mycat的表中插入数据时,test01,test02也会自动插入数据。

mycat 使用场景二---分库分表,取模分片(等分)

image.png

第一步,编辑conf\rule.xml 设置取模数

    <tableRule name="mod-long">
        <rule>
            <columns>id</columns>
            <algorithm>mod-long</algorithm>
        </rule>
    </tableRule>
    
    
    <function name="mod-long" class="io.mycat.route.function.PartitionByMod">
        <!-- how many data nodes -->
        <property name="count">2</property>
    </function>

第二步,在conf\ Schema.Xml 中配置表节点

    <table name="phones" primaryKey="ID" rule="mod-long" dataNode="dn1,dn2" />

在mycat 数据库中创建phones表,重启mycat restart 后,test01和test02会自动创建phones表

image.png
image.png

image.png

当我们向mycat数据库的phones中插入数据时,数据会自己的等分到test01和test02的数据库中。

mycat 使用场景三---分库分表,枚举分片

通过在配置文件中配置可能的枚举 id,自己配置分片,根据表中的某一字段的值枚举分到多个数据库表中。

如下面表中根据is_free字段0,1不同的值枚举到不同的库中

image.png

第一步,配置conf\rule.xml 枚举的字段

    <tableRule name="sharding-by-intfile">
        <rule>
            <columns>is_free</columns>
            <algorithm>hash-int</algorithm>
        </rule>
    </tableRule>

我们可以看到枚举的方法是hash-int ,而hash-in的实现如下:

    <function name="hash-int"
        class="io.mycat.route.function.PartitionByFileMap">
        <property name="mapFile">partition-hash-int.txt</property>
    </function>

即枚举值的配置文件为partition-hash-int.txt,打开conf\ partition-hash-int.txt 设置枚举

image.png

第一个表示字段的值,第二个表示第几个库

第二步,在conf\ Schema.Xml 文件中新增一个表

  <table name="customer" primaryKey="ID" dataNode="dn1,dn2" rule="sharding-by-intfile" />

重启mycat ,创建customer表,当我们往customer插入数据时,is_free=0的到test01库中,is_free=1的数据到test02 中。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,905评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,140评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,791评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,483评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,476评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,516评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,905评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,560评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,778评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,557评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,635评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,338评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,925评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,898评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,142评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,818评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,347评论 2 342

推荐阅读更多精彩内容

  • 《布拉格,以足球的名义》连载之《瓦茨拉夫·哈维尔机场》 迪拜转机的时候,收到国内同事T的微信截图,内容大概是确认代...
    劈柴捌哥阅读 448评论 0 1
  • 久闻拆书读书法大名,从2016年7月陆续接触知识管理、知识体系构建课程后,各路知识服务网红所共同强调的一个核心观点...
    Jack周希望阅读 315评论 0 4
  • 待我长发及腰,兄弟娶我可好? 你家三亩薄田,这些我都知道。 头年饥荒大汗,烈日似火灼烧。 本就穷乡僻壤,赋税五六丈...
    刘逍遥阅读 246评论 2 7