前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MySQL运维8-Mycat分库分表之范围分片

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

作者头像
Se7eN_HOU
发布2023-12-19 09:38:32
1940
发布2023-12-19 09:38:32
举报
文章被收录于专栏:侯哥的Python分享

一、范围分片

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

  说明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中创建

代码语言:javascript
复制
create table tb_range (id int auto_increment primary key, name varchar(20));

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

代码语言:javascript
复制
insert into tb_range (id, name) values (1,'张三');

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

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

代码语言:javascript
复制
insert into tb_range (id, name) values (5000000,'李四');

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

代码语言:javascript
复制
insert into tb_range (id, name) values (5000001,'王五');

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

代码语言:javascript
复制
insert into tb_range (id, name) values (10000001,'赵六');

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

代码语言:javascript
复制
insert into tb_range (id, name) values (15000001,'侯七');

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

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

  重新插入id=15000001的数据

代码语言:javascript
复制
insert into tb_range (id, name) values (15000001,'侯七');

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

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

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-12-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、范围分片
  • 二、准备工作
  • 三、配置schema.xml
  • 四、配置server.xml
  • 五、范围分片测试
相关产品与服务
云数据库 MySQL
腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档