接上一篇帖子《MyCat-07之centos7上使用mycat部署水平分表---分片枚举》
一、目标
使用mycat部署分片枚举。
什么叫数字范围分片?
按照表中某个指定的字段值(数字int类型)的范围去分片,比如值在1到3000的放到节点1服务器,值在3001到5000的放到节点2服务器上。没有在规则范围内的放在指定的默认的节点服务器上。
二、实施mycat数字范围分片
1、 修改/usr/local/mycat/conf/shcema.xml;
在
,意思是,有一个表叫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算法;
将
改为:
注释:添加一个默认节点,即如果某条数据没有被本算法包括,那么这条数据就存放到默认的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
版权声明:本文不是「本站」原创文章,版权归原作者所有 | 原文地址: