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

MySQL运维7-Mycat水平分表

作者头像
Se7eN_HOU
发布2023-12-18 12:23:00
1990
发布2023-12-18 12:23:00
举报
文章被收录于专栏:侯哥的Python分享

一、水平分表场景

  在业务系统中,有一张日志表,业务系统每天都会产生大量的日志数据,单台服务器的数据存储即处理能力是有限的,可以对数据库表进行拆分,这时候就可以使用水平分表的策略

  说明1:水平分表,每个表的结构一致

  说明2:水平分表,每个表的数据不同

  说明3:水平分表,所有表的合集才是完整的数据

二、准备工作

  在192.168.3.90,192.168.3.91,192.168.92 三台MySQL服务器上创建hl_logs数据库

三、配置schema.xml 

  说明1:之前的schema.xml已经配置过其他的schema,dataNode等标签都不用动,直接新增我们本次案例需要的就行了,多个标签只要不冲突是可以并存的

  说明2:逻辑库为hl_logs

  说明3:逻辑表为tb_logs

  说明4:数据节点为dn4,dn5,dn6

  说明5:数据节点dn4,dn5,dn6需要的数据库配置也是dbhost1,dbhost2,dbhost3,是可以公用的。

  说明6:分片规则使用的是 rule="mod-long" 规则,该规则在rule.xml有定义如下

  说明7:继续看 function 中 mod-long 的定义

  说明8:这里的count 3的意思是 id主键 按照和3进行取模运算,然后根据取模后的结果,将数据写入到不同的数据节点,即有几个数据节点,就会平均的写入到数据节点中

  说明9:我这里整好配置了三个数据节点,而这里的默认值也是3,所以不用改了,如果我们想要将数据平均的写到4个数据节点上,则这里的count需要改为4

四、配置server.xml

  说明1:root 这个用户可以访问 shopping 和 hl_logs 两个数据库

  说明2:而 user 这个用户只能访问 shopping 这个数据库

  说明3:我现在测试的都是使用 root 这个账户,所以 user 这个可以不用配置

五、水平分表测试

  首先重启Mycat

  登录Mycat

  查看逻辑库和逻辑表

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

代码语言:javascript
复制
create table tb_logs (id int auto_increment primary key, model_name varchar(200), operate_user varchar(20), operate_time varchar(19));

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

代码语言:javascript
复制
insert into tb_logs (id, model_name, operate_user, operate_time) values (1, '访问首页','张三', '2023-12-17 21:52:54');

  说明1:id=1的数据,按照mod-long的算法,会用 1%3=1, 因为 和3取模 的结果只有 0,1,2, 所以结果为0时, 数据将写在第一个数据节点,结果为1时,结果会保存在第二个数据节点,结果为2时,保存在第三个数据节点上,而 1%3=1 ,所以id=1的数据写在了192.168.3.91第二个数据节点上。

  说明2:第二个数据节点即192.168.3.91这个节点,所以id=1的数据只写入到这个数据节点上,其他节点上还没有数据。

  继续验证

代码语言:javascript
复制
insert into tb_logs (id, model_name, operate_user, operate_time) values (2, '访问详情页','李四', '2023-12-17 22:55:24');

  说明3:按照mod-long算法,id=2的数据被写入到192.168.3.92,第三个数据节点上,成功,继续验证。

代码语言:javascript
复制
insert into tb_logs (id, model_name, operate_user, operate_time) values (3, '访问评论页','王五', '2023-12-17 22:03:34');

  说明4:按照mod-long算法,id=3的数据被写入到192.168.3.90,第1个数据节点上,成功,继续验证。

代码语言:javascript
复制
insert into tb_logs (id, model_name, operate_user, operate_time) values (4, '访问首页','赵六', '2023-12-17 22:09:34');

  说明5:按照mod-long算法,id=4的数据被写入到192.168.3.91,第二个数据节点上,成功。

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

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

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

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

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