SSM+shiro等javaweb收藏springboot

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

2018-10-27  本文已影响293人  翼云先森

什么是mycat

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

关键特性

安装

官网下载: 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 中。

上一篇下一篇

猜你喜欢

热点阅读