MySQL运维8-Mycat分库分表之范围分片

一、范围分片

  根据指定的字段及其配置的范围与数据节点的对应情况,来决定该数据属于哪一个分片。

  

  说明1:范围分片会提前提供一个分片的范围默认是0-500万是一个分片,500万-1000万是一个分片,1000万-1500万是一个分片,超过1500万要重新设置。

  说明2:这个范围我们可以根据自己的需要去自定义使用。

   

  说明3:在配置schema.xml的时候,默认的分片规则 rule="auto-sharding-long" 就是范围分片规则

  说明4:在rule.xml中有auto-sharding-long的定义,其分片的依据是 id 主键

  说明5:在rule.xml中有auto-sharding-long的定义,其采用的算法是 rang-long 算法

  说明6:在function rang-long中有一个property 属性,该属性引用了一个外部文件 “autopartition-long.txt” 文件,在这个文件中就是定义分片的范围,如果我们要实现自定义数据分片即修改该文件中的范围即可。

二、准备工作

  

  说明1:在三个数据数据节点上都先创建好需要使用的数据库range_db

三、配置schema.xml

  

  说明1:新增schema标签,逻辑库的名称为range_db,逻辑表的名称为tb_range

  说明2:分片规则为 rule="auto-sharding-long" 即范围分片

  

  说明3:dn7,dn8,dn9对应的数据节点依然是dbhost1,dbhost2,dbhost3.

   

  说明4:dbhost1数据节点为192,168.3.90

  说明5:dbhost2数据节点为192.168.3.91

  说明5:dbhost3数据节点为192.168.3.92

四、配置server.xml

  

  说明1:给root用户添加range_db的操作权限

五、范围分片测试

  首先重启Mycat

  

  登录Mycat

  

  查看逻辑库逻辑表

  

  这里的tb_range只是逻辑库,而在MySQL中还并没有tb_range这个表,需要在Mycat中创建

create table tb_range (id int auto_increment primary key, name varchar(20));

  

  插入一条数据,然后查看数据节点中对应的数据变化

insert into tb_range (id, name) values (1,'张三');

  

  说明1:id=1的数据插入到了192.168.3.90的数据节点上了,我们采用的是默认的分片范围

  说明2:继续添加一个id为5000000的数据看一下是否会继续插入到192.168.3.90这个数据节点上

insert into tb_range (id, name) values (5000000,'李四');

  

  说明3:没有问题,id=5000000的也插入到了第一个数据节点上,继续测试id=5000001的数据

insert into tb_range (id, name) values (5000001,'王五');

  

  说明4:id=5000001的数据,插入到了192.168.3.91第二个数据节点上了,说明5000000是第一个和第二个数据节点的分界线,我们在测试一下id=10000001

insert into tb_range (id, name) values (10000001,'赵六');

  

  说明5:id=10000001的数据插入到了192.168.3.92第三个数据节点上了。继续测试一下15000001这个id超过了分片范围,看看是否还能成功?

insert into tb_range (id, name) values (15000001,'侯七');

  

  说明6:这是就报错了,因为根据分片规则已经找不到15000001应该保存到那个分片了,如果要继续添加id的话,就需要在自定义去增加分片范围了,需要修改 “autopartition-long.txt”这个文件

  

  修改了配置文件后,我们重新启动一下Mycat然后再次插入id=15000001数据试试

   

  重新插入id=15000001的数据

insert into tb_range (id, name) values (15000001,'侯七');

  

  

  说明7:修改分片范围后,id=15000001的数据也可以保存了。

  说明8:如果使用范围分片的时候,如果默认的分片范围满足不了需求,我们只需要修改 "autopartition-long.txt" 这个文件即可。

  

  说明9:在Mycat上进行查询的数据是所有数据节点的全集。范围分片是水平分库分表的一种方式。

 
posted @ 2023-12-18 17:38  Se7eN_HOU  阅读(194)  评论(0编辑  收藏  举报