MyCat-08之centos7上使用mycat部署水平分表---数字范围分片

接上一篇帖子《MyCat-07之centos7上使用mycat部署水平分表---分片枚举

一、目标

使用mycat部署分片枚举。
什么叫数字范围分片?

按照表中某个指定的字段值(数字int类型)的范围去分片,比如值在1到3000的放到节点1服务器,值在3001到5000的放到节点2服务器上。没有在规则范围内的放在指定的默认的节点服务器上。

二、实施mycat数字范围分片

1.修改/usr/local/mycat/conf/shcema.xml。

在<schema>内追加一行<table name="salary" dataNode="dn1,dn2" rule="auto_sharding_long"></table>,意思是,有一个表叫salary,被分片到了dn1和dn2两台节点服务器上,分片规则叫auto_sharding_long(需在rule.xml中定义)。完整代码如下

<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">

        <schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1">
           <table name="teacher" dataNode="dn2"></table>
           <table name="student" dataNode="dn1,dn2" rule="mod_rule">
               <childTable name="student_record" primaryKey="xid" joinKey="student_id" parentKey="xid" />
           </table>
           <table name="xuser" dataNode="dn1,dn2" type="global"></table>
           <table name="salary" dataNode="dn1,dn2" rule="auto_sharding_long"></table>
        </schema>
        <dataNode name="dn1" dataHost="host1" database="xkahn" />
        <dataNode name="dn2" dataHost="host2" database="xkahn" />
        <dataHost name="host1" maxCon="1000" minCon="10" balance="0"
                          writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
                <heartbeat>select user()</heartbeat>
                <writeHost host="hostM1" url="10.100.100.31:3306" user="root"
                                   password="123123">
                </writeHost>
        </dataHost>
        <dataHost name="host2" maxCon="1000" minCon="10" balance="0"
                          writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
                <heartbeat>select user()</heartbeat>
                <writeHost host="hostM1" url="10.100.100.32:3306" user="root"
                                   password="123123">
                </writeHost>
        </dataHost>
</mycat:schema>

2.在/usr/local/mycat/conf/rule.xml中增加分片算法

        <tableRule name="auto_sharding_long">
                <rule>
                        <columns>money</columns>
                        <algorithm>rang-long</algorithm>
                </rule>
        </tableRule>

3.修改/usr/local/mycat/conf/rule.xml中的rang-long算法


        <function name="rang-long"
                          class="io.mycat.route.function.AutoPartitionByLong">
                <property name="mapFile">autopartition-long.txt</property>
        </function>

改为:
        <function name="rang-long"
                          class="io.mycat.route.function.AutoPartitionByLong">
                <property name="mapFile">autopartition-long.txt</property>
                <property name="defaultNode">0</property>
        </function>

注释:添加一个默认节点,即如果某条数据没有被本算法包括,那么这条数据就存放到默认的mycat节点服务器0(第一个节点服务器)上,1等于第二台节点服务器。

4.修改算法文件/usr/local/mycat/conf/autopartition-long.txt
将原有的全部用"#"注释掉,或者都删除掉。然后添加下面两行

0-3000=0
3001-5000=1

注释:这个意思是工资数在0到3000块钱的教师工资放到第一个节点服务器,工资范围在3001到5000块的放到第二台节点服务器

5.开个mycat31的新终端启动mycat

cd /usr/local/mycat/bin
./mycat console

6.在开个mycat31的新终端进入mycat的数据管理平台
创建本次的数字范围分片表salary,并插入测试数据

mysql -umycat -p123456 -h 192.168.73.100 -P 8066
use TESTDB;
create table salary(xid int(10) not null unique primary key,name varchar(20) not null,teacher_id int(10),money int(10),note varchar(500));
insert into salary(xid,name,teacher_id,money,note) values (1,"kahn",3721,3690,"kahn保安岗位工资3690元");
insert into salary(xid,name,teacher_id,money,note) values (2,"serena",129,3000,"serena的工资是3000元");
insert into salary(xid,name,teacher_id,money,note) values (3,"songsuer",138,2000,"宋姝儿的工资是2000元");
insert into salary(xid,name,teacher_id,money,note) values (4,"柳多妍",139,9999,"柳多妍的工资是9999津巴布韦币");
insert into salary(xid,name,teacher_id,money,note) values (5,"xia",3312,6613,"xia的工资是6613元");

注释,上面的应该只有id为1名字叫kahn的数据放在了第二个节点服务器mycat32上,其余的全部被放到了第一个节点服务器mycat31上

7.在mycat上、还有两台物理服务器查数据是否存在(观察是否按照规则分片了)
select * from salary;
a.3690大于3000所以自动被分到第二台mysql服务器
b.3000小于3001所以被分到第一台mysql服务器
c.2000小于3001所以被分到第一台mysql服务器
d.9999大于5000了,没有被满足的条件了,所以就被分到了默认服务器<第一台mysql服务器>
e.6613大于5000了,没有被满足的条件了,所以就被分到了默认服务器<第一台mysql服务器>

------------------END--------------2020年3月26日15:33:50-------------------------

老铁双击666

猜你喜欢

转载自blog.csdn.net/xoofly/article/details/105119275