MyCat - 分片 - 水平拆分 - 分片配置及测试 | 学习笔记

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
云数据库 RDS PostgreSQL,高可用系列 2核4GB
简介: 快速学习 MyCat - 分片 - 水平拆分 - 分片配置及测试

开发者学堂课程【全面讲解开源数据库中间件MyCat使用及原理(二):MyCat - 分片 - 水平拆分 - 分片配置及测试】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/756/detail/13263


MyCat - 分片 - 水平拆分 - 分片配置及测试

内容介绍:

一、分片配置

二、测试

 

一、分片配置

准备工作已经完成,接下来完成 gd_log 这张表的水平分片。首先需要去配置MyCat中的核心配置文件 schema.xml 。打开远程连接工具,找到 MyCat 的核心配置文件,输入 cd /usr/local/mycat ,输入ll,输入 cd conf/,  代码运行如下图:

image.png

找到核心配置文件 schema.xml,文件里面配置了逻辑库、逻辑表等信息。接着需要把垂直拆分时的配置文件的信息备份,重新命名为 mv schema.xml schema_v.xml,配置文件的名字修改完成。因此,my cat 不会找 schema.xml 配置文件,相当于把 schema.xml 文件备份。my cat 需要 schema.xml,所以需要把这一份配置文件拷贝一份来,输入:cp schema_v.xml schema.xml。接下来在进行操作的时候,操作的是 schema.xml, 在 schema.xml 中来进行修改。

此时要修改这个配置文件,通过 Nodepad++ 中的远程工具来进行修改。把当前页面关闭,接着刷新页面,找到 schema.xml,打开编码,然后去修改其中配置。

image.png

对于上图所示的配置,关于逻辑库逻辑表的配置直接删除。然后将如下配置, 直接粘贴过来。

<schema name=”LOG_DB” checkSQLschema=”false”>

<tablename=”tb_log”dataNode=”dn1,dn2,dn3”primaryKey=”id” rule=”mod-long”/></schema>

出现<schema name=”LOG_DB”checkSQLschema=”false sqlMaxLimit=“100”>

<tablename=”tb_log”dataNode=”dn1,dn2,dn3”primaryKey=”id” rule=”mod-long”/></schema>

schema 配置文件出现,LOG_DB 为逻辑库,后面是检测 mysql 语句中的逻辑库的共鸣以及关于查询语句分页的限制,这些都是默认参数,不用改动。

然后在逻辑库下有 tb_log 这张逻辑表。并且这张逻辑表的数据将会在三个数据节点当中存储:dn1,dn2,dn3,而 dn1,dn2,dn3 分别指向的是下面的数据节点:在dataNode 当中的 dn1,dn2,dn3。并且指定主键是 id,后面 rule 指的是分片规则。mod-long 是取模分片。

<dataNode name =”dn1” dataHos=“host1”database=”user_db”/>

<dataNode name =”dn2” dataHos=“host2”database=”goods_db”/>

<dataNode name =”dn3” dataHos=“host3”database=”order_db”/>

rule 关联的是 rule.xml 中,<tableRule name=”mod-long”> 的分片规则。<algorithm>mod-long</algorithm 引用了分割算法 mod-long。

<function name=”mod-long”class=”io.mycat.route.function.PartitionByMod‘’>

<!-- how many data nodes-->

<property name=”count”>3</property>

</function>

mod-long 是取模分片。下面配置有 count,how many data nodes 是数据节点的大小,有多少个数据节点。对于当前来说,是三个数据节点。所以默认为三,不用修改。

<dataNode name =”dn1” dataHos=“host1”database=”user_db”/>

<dataNode name =”dn2” dataHos=“host2”database=”goods_db”/>

<dataNode name =”dn3” dataHos=“host3”database=”order_db”/>

数据主题分别是 host1、 host2 、host3。这三台服务器对应的是 157、158、159。要连接的是 157、158,159 上的数据库。log_db 数据库已经建立出来。。所以在这一块关联的数据库都是 log_db。

<dataNode name =”dn1” dataHos=“host1”database=”log_db”/>

<dataNode name =”dn2” dataHos=“host2”database=”log_db”/>

<dataNode name =”dn3” dataHos=“host3”database=”log_db”/>

这份配置已经完成。

简单回顾一下:配置了逻辑库 LOG_DB, 配置逻辑表 tb_log 。tb_log 将会分散存储在三个节点当中。这三个节点分别对应的是 157、158、159 分别关联的是这三个数据库上面的 log_db 数据库。所采用的分片规则是 mod-long 取模分片。

schema 配置完毕,rule.xml 配置不用改动,接下来需要 server.xml 修改,需要把<user name=”root”dafaultAccount=”true”>中的逻辑库换为 LOG_DB ,代表root 用户以 123456 密码来访问逻辑库 LOG_DB。访问可读可写。而对于 user 用户来说,可以访问 LOG_DB,访问只读。访问密码都是 123456。

 

二、测试

配置完成后,可以启动 mycat 进行测试。启动 mycat, 需要再退一层,要执行 bin目录下的 mycat。

然后重启一下 mycat,重启完成之后,在左侧这块来连接 mysql-h127.0.0.1- P 8066-u root-p。密码 123456。效果如下图。

image.png

现在已经连接 mycat。执行指令 show databases。mycat 当中逻辑库 LOG_DB, 在 mysql1> 后输入 use LOG_DB;  执行如下图。

image.png

现在已经切换到 LOG_DB 中。接着执行 show tables ,可以看到 LOG_DB 当中有一张逻辑表 tb_log。在底层三排数据库是否出现这张表,切换数据库来验证:在mysql1> 后分别输入 use log_db 和 show tables,执行后 157、158、159 上并没有这张表。因为只是在 schema.xml 中定义了逻辑库逻辑表。这张逻辑表没有对应的表结构。所以连接 mycat 可以看到逻辑库以及逻辑表之后,定义 tb_log 的表结构。在 mycat 当中来定义,不需要操作 mysql 。

CREATE TABLE ‘tb_log’(

‘id’ bigint (20)NOT NULL COMMENT ‘ID’,

‘model_name’ var char(200) DEFAULT NULL COMMENT ‘模块名’,

‘model_value’ var char(200) DEFAULT NULL COMMENT ‘,模块值’,

‘return_value’ var char(200) DEFAULT NULL COMMENT ‘返回值’,

‘return_class’ var char(200) DEFAULT NULL COMMENT ‘返回值类型’,

‘operate_user’ var char(20) DEFAULT NULL COMMENT ‘操作用户’,

‘operate_time’ var char(20) DEFAULT NULL COMMENT ‘操作时间’,

‘param_and_value’ var char(500) DEFAULT NULL COMMENT ‘请求参数名及参数值’,

‘operate_class’ var char(200) DEFAULT NULL COMMENT ‘操作类’,

‘operate_method’ var char(200) DEFAULT NULL COMMENT ‘操作方法’,

‘cost_time’ bigint(20) DEFAULT NULL COMMENT ‘执行方法耗时,单位ms’,

‘source’int(1) DEFAULT NULL COMMENT ‘来源:1 PC,2 Android,3 IOS’,

PRIMARY KEY(‘id’)

)ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

找到 tb_log 表结构,里面的字段第一个是 id,第二个是模块名,第三个是模块值。日志表当中记录的是当前什么时间什么模块被哪个用户访问,以及访问的是哪个类哪个方法访问的请求参数、返回值、访问的耗时当前执行请求来源是 pc 端还是移动端。所以对应的字段是模块名、模块值、返回值、返回值类型、操作用户、操作时间、请求参数名与参数值以及操作的类、操作方法、操作方法执行耗时以及当前日志的来源是安卓、IOS 还是 PC 端。

把这一条 mysql 语句复制,在 mycat 当中创建 tb_log 表结构,执行后表结构创建完成。

接下来通过 show tables 查看。输入 123456 密码重新连接,在 mysql1> 后分别输入 use log_db 和 show tables,发现 tb_log 表存在,关键点是在 mysql 当中这张表是否存在。发现 157、158、159 这三张表都存在。

接下来需要在 mycat 当中插入数据,执行下面的数据。一共插入了六条数据,id 分别是 123456。

image.png

执行 select*from tb_log 。六条数据都已经插入。id 分别是 123456,六条数据可以全部查询出。

image.png

这六条数据在 mycat 中全部可以查询出。但是需要思考六条数据存储到哪个节点。此时在 157 上,执行 select*from tb_log,发现存储了 3、6 两条数据。

在 158 上,执行select*from tb_log,存储了 1、4 两条数据。在 159 上,执行select*from tb_log3 ,存储的两条数据分别为 2 和 5。

接着分析往 mycat 中插入六条数据时,是怎么分散存储到 157、158、159 上的。当前的架构如下:

image.png

在操作 mysql 语句时,直接操作 mycat,mycat 将请求往下分发,最终将数据存储在 mysql 中。mycat 怎么去判定当前插入的数据落在哪个节点取决于 rule。rule 叫做分片规则。这个分片规则选择的是 mod-long。mod-long 叫做取模分片。在配置 rule=mod-long 时,引用的是 rule.xml 中的分片规则:<columns>id</ columns>

<algorithm>mod-long</algorithm

按照指定的 id 字段(主键)进行取模分片。

在这一块插入 1、2、3、4、5、6 六个主键,利用取模进行分配。果是什么样的?由于配置了当前的节点数量是 3。此时来 id1 后,1%3=1, 如果等于一对应的节点是第二个节点。因为索引值从零开始的,1 是第一个节点。接着 2%3=2 这个是第三个节点,因为索引是从零开始的。2 是第三个节点。然后接下来 3%3=0 0 是第一个节点。

依次罗列: 4%3=1 第二个节点;5%3=2 第三个节点;6%3=0 第一个节点。

第一个节点的 ip 地址是 157,然后第二个节点的 ip 地址是 158。第三个节点的 ip地址是 159。

推算出在第一个节点 157 上存储的主键分别是 3 和 6,在第二个节点上存储的主键分别是 1 和 4,在第三个节点 159 上对应的主键分别是 2 和 5。

image.png

以上就是分片规则 mod-long 按照取模的分析。水平拆分使原来存储在一张表的数据,现在可以分散存储在三个数据库当中,并且完成扩容,利用这三台数据库、服务器对应的磁盘以及 cpu 的相关资源。

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
相关文章
|
2月前
|
Java 测试技术 数据安全/隐私保护
通过yaml文件配置自动化测试程序
通过yaml文件可以将自动化测试环境,测试数据和测试行为分开,请看一下案例
85 4
|
3月前
|
XML Ubuntu Java
如何在Ubuntu系统上安装和配置JMeter和Ant进行性能测试
进入包含 build.xml 的目录并执行:
181 13
|
10月前
|
运维 关系型数据库 MySQL
os-copilot安装_配置_功能测试全集
我是一位中级运维工程师,我平时工作会涉及到 各类服务器的 数据库 与 java环境配置 操作。 我顺利使用了OS Copilot的 -t -f | 功能,我的疑惑是不能在自动操作过程中直接给与脚本运行权限,必须需要自己运行一下 chmod 这个既然有了最高的权限,为什么就不能直接给与运行权限呢。 我认为 -t 功能有用,能解决后台运行基础命令操作。 我认为 -f 功能有用,可以通过task文件中撰写连续任务操作。 我认为 | 对文件理解上有很直接的解读,可以在理解新程序上有很大帮助。
301 86
|
10月前
|
人工智能 Ubuntu Linux
os-copilot使用之全面配置与使用测试
作为一名个人开发者,我主要从事云服务器架设工作。近期,我成功使用了OS Copilot的 `-t -f |` 功能,解决了执行语句、连续提问及快速理解文件的问题。我发现这些功能非常实用,特别是在使用Workbench时能快速调用AI助手。此外,建议将AI功能与xShell工具联动,进一步提升效率。文中详细记录了购买服务器、远程连接、安装配置OS Copilot以及具体命令测试的过程,展示了如何通过快捷键和命令行操作实现高效开发。
354 67
|
9月前
|
缓存 Java 测试技术
【01】噩梦终结flutter配安卓android鸿蒙harmonyOS 以及next调试环境配鸿蒙和ios真机调试环境-flutter项目安卓环境配置-gradle-agp-ndkVersion模拟器运行真机测试环境-本地环境搭建-如何快速搭建android本地运行环境-优雅草卓伊凡-很多人在这步就被难倒了
【01】噩梦终结flutter配安卓android鸿蒙harmonyOS 以及next调试环境配鸿蒙和ios真机调试环境-flutter项目安卓环境配置-gradle-agp-ndkVersion模拟器运行真机测试环境-本地环境搭建-如何快速搭建android本地运行环境-优雅草卓伊凡-很多人在这步就被难倒了
1072 3
【01】噩梦终结flutter配安卓android鸿蒙harmonyOS 以及next调试环境配鸿蒙和ios真机调试环境-flutter项目安卓环境配置-gradle-agp-ndkVersion模拟器运行真机测试环境-本地环境搭建-如何快速搭建android本地运行环境-优雅草卓伊凡-很多人在这步就被难倒了
|
11月前
|
域名解析 弹性计算 监控
slb测试基本配置检查
slb测试基本配置检查
299 60
|
10月前
|
Dart 前端开发 Android开发
【02】写一个注册页面以及配置打包选项打包安卓apk测试—开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
【02】写一个注册页面以及配置打包选项打包安卓apk测试—开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
310 1
【02】写一个注册页面以及配置打包选项打包安卓apk测试—开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
|
10月前
|
数据可视化 前端开发 测试技术
接口测试新选择:Postman替代方案全解析
在软件开发中,接口测试工具至关重要。Postman长期占据主导地位,但随着国产工具的崛起,越来越多开发者转向更适合中国市场的替代方案——Apifox。它不仅支持中英文切换、完全免费不限人数,还具备强大的可视化操作、自动生成文档和API调试功能,极大简化了开发流程。
|
5月前
|
Java 测试技术 容器
Jmeter工具使用:HTTP接口性能测试实战
希望这篇文章能够帮助你初步理解如何使用JMeter进行HTTP接口性能测试,有兴趣的话,你可以研究更多关于JMeter的内容。记住,只有理解并掌握了这些工具,你才能充分利用它们发挥其应有的价值。+
911 23
|
7月前
|
SQL 安全 测试技术
2025接口测试全攻略:高并发、安全防护与六大工具实战指南
本文探讨高并发稳定性验证、安全防护实战及六大工具(Postman、RunnerGo、Apipost、JMeter、SoapUI、Fiddler)选型指南,助力构建未来接口测试体系。接口测试旨在验证数据传输、参数合法性、错误处理能力及性能安全性,其重要性体现在早期发现问题、保障系统稳定和支撑持续集成。常用方法包括功能、性能、安全性及兼容性测试,典型场景涵盖前后端分离开发、第三方服务集成与数据一致性检查。选择合适的工具需综合考虑需求与团队协作等因素。
968 24