AI大模型教程
一起来学习

Java-132 深入浅出 MySQL MyCat 使用指南:安装步骤、服务管理与分片规则详解

点一下关注吧!!!非常感谢!!持续更新!!!

🚀 AI篇持续更新中!(长期更新)

AI炼丹日志-31- 千呼万唤始出来 GPT-5 发布!“快的模型 + 深度思考模型 + 实时路由”,持续打造实用AI工具指南!📐🤖

💻 Java篇正式开启!(300篇)

目前2025年09月22日更新到:
Java-130 深入浅出 MySQL MyCat 深入解析 核心配置文件 server.xml 使用与优化
MyBatis 已完结,Spring 已完结,Nginx已完结,Tomcat已完结,分布式服务正在更新!深入浅出助你打牢基础!

📊 大数据板块已完成多项干货更新(300篇):

包括 Hadoop、Hive、Kafka、Flink、ClickHouse、Elasticsearch 等二十余项核心组件,覆盖离线+实时数仓全栈!
大数据-278 Spark MLib – 基础介绍 机器学习算法 梯度提升树 GBDT案例 详解

MyCAT 安装配置指南

下载安装

可以从MyCAT官方网站(http://www.mycat.org.cn/)下载最新稳定版本,下载后执行以下步骤:

  1. 解压安装包:
tar -zxvf Mycat-server-xx-RELEASE-xxxxx-linux.tar.gz
  1. 将解压后的目录移动到/usr/local:
mv mycat /usr/local/
  1. 设置环境变量(可选):
export MYCAT_HOME=/usr/local/mycat
export PATH=$PATH:$MYCAT_HOME/bin

基础配置

MyCAT的主要配置文件位于conf目录下:

  • server.xml:配置MyCAT服务参数
  • schema.xml:配置逻辑库和分片规则
  • rule.xml:配置分片算法

服务管理命令

MyCAT提供了以下管理命令:

# 启动MyCAT服务
./mycat start

# 停止MyCAT服务
./mycat stop

# 重启MyCAT服务
./mycat restart

# 查看服务状态
./mycat status

# 控制台模式启动(调试用)
./mycat console

常见问题排查

  1. 如果启动失败,可以查看日志文件:
tail -f /usr/local/mycat/logs/wrapper.log
  1. 端口冲突检查:
netstat -tlnp | grep 8066
  1. 内存不足时可以修改wrapper.conf调整JVM参数

连接测试

成功启动后,可以使用MySQL客户端连接:

mysql -h127.0.0.1 -P8066 -uroot -p123456

注意:默认用户名/密码为root/123456,可以在server.xml中修改

分库分表

在 rule.xml 配置 Mycat 分库分表

mycat:rule xmlns:mycat="http://io.mycat/">
  tableRule name="b_order_rule">
    rule>
      columns>company_idcolumns>
      algorithm>partitionByOrderFuncalgorithm>
    rule>
  tableRule>
  
  function name="partitionByOrderFunc"
    class="io.mycat.route.function.PartitionByMod">
    property name="count">2property>
  function>
mycat:rule>

cat 分片规则详解

时间类分片规则

按天分片

  • 按照自然日进行数据分片存储
  • 示例:2023-01-01的数据存在分片1,2023-01-02的数据存在分片2
  • 适合日增量数据量大且查询常按日期过滤的场景

自然月分片

  • 按照日历月份进行分片
  • 示例:2023年1月数据存在分片1,2023年2月数据存在分片2
  • 适合按月统计分析的业务场景

单月小时分片

  • 在单月内按小时进行细分
  • 示例:2023-01-01 00:00-01:00的数据存在分片1,01:00-02:00在分片2
  • 适合高并发写入的时间序列数据

哈希类分片规则

Hash固定分片

  • 对关键字段进行标准Hash算法计算后分片
  • 示例:对用户ID取Hash值后模8确定分片位置
  • 优势是数据分布均匀

日期范围Hash分片

  • 先按日期范围分区,再对分区内数据做Hash
  • 示例:先按月份分区,再对用户ID取Hash确定分片
  • 适合既有时间特征又需要均匀分布的场景

截取数字Hash求模范围分片

  • 从字段中截取数字部分,经过Hash和求模后确定范围
  • 示例:截取订单号后4位,Hash后模10确定0-9的分片范围
  • 适合有数字编号特征的业务数据

一致性Hash分片

  • 使用一致性Hash算法减少节点增减时的数据迁移量
  • 适合需要动态扩容缩容的分布式系统

取模类分片规则

取模分片

  • 直接对关键字段值取模确定分片
  • 示例:用户ID % 16 = 分片编号
  • 实现简单但扩容时影响较大

取模范围分片

  • 先取模再映射到范围区间
  • 示例:ID % 100 = 0-49 → 分片1,50-99 → 分片2
  • 比纯取模更灵活

范围求模分片

  • 先按范围分区,再对分区内数据取模
  • 示例:0-9999在分片1,10000-19999在分片2,分区内再取模
  • 适合有明显数值范围特征的数据

其他分片规则

枚举分片

  • 根据字段枚举值直接映射到特定分片
  • 示例:按省份字段将数据分配到对应区域分片
  • 适合有明显地域特征的数据

范围约定分片

  • 预先约定好各分片的数值范围
  • 示例:分片1存0-100万,分片2存100-200万
  • 需要提前规划好数据规模

应用指定分片

  • 由应用程序显式指定数据存储分片
  • 完全由业务逻辑控制分片位置
  • 灵活性最高但实现复杂

冷热数据分片

  • 根据数据访问频率将热数据、冷数据分别存储
  • 示例:最近3个月数据在热分片,历史数据在冷分片
  • 优化存储成本和查询性能

MyCAT常用分片配置

自动分片

tableRule name="auto-sharding-long">
  rule>
    columns>idcolumns>
    algorithm>rang-longalgorithm>
  rule>
tableRule>
function name="rang-long"
  class="io.mycat.route.function.AutoPartitionByLong">
  property name="mapFile">autopartition-long.txtproperty>
function>

autopartition-long.txt 文件内容如下:

# range start-end ,data node index
# K=1000,M=10000.
0-500M=0
500M-1000M=1
1000M-1500M=2

枚举分片

把数据分类存储:

tableRule name="sharding-by-intfile">
  rule>
    columns>sharding_idcolumns>
    algorithm>hash-intalgorithm>
  rule>
tableRule>
function name="hash-int"
  class="io.mycat.route.function.PartitionByFileMap">
  property name="mapFile">partition-hash-int.txtproperty>
  
  property name="defaultNode">0property>
function>

partition-hash-int.txt 文件内容如下:

10000=0
10010=1

取模分片

根据分片字段值 % 分片数

tableRule name="mod-long">
  rule>
    columns>idcolumns>
    algorithm>mod-longalgorithm>
  rule>
tableRule>
function name="mod-long" class="io.mycat.route.function.PartitionByMod">
  
  property name="count">3property>
function>

冷热数据分片

根据日志查询日志数据冷热数据分布,最近N个月到实时交易库查询,超过N个月的按照M天分片。

tableRule name="sharding-by-date">
  rule>
    columns>create_timecolumns>
    algorithm>sharding-by-hotdatealgorithm>
  rule>
tableRule>

function name="sharding-by-hotdate"
  class="org.opencloudb.route.function.PartitionByHotDate">
  
  property name="dateFormat">yyyy-MM-ddproperty>
  
  property name="sLastDay">30property>
  
  property name="sPartionDay">30property>
function>

一致性分片(Consistent Sharding)

一致性分片是一种基于哈希算法的数据分片策略,它使用MurmurHash算法来确保数据均匀分布。MyCat中的实现配置如下:

tableRule name="sharding-by-murmur">
  rule>
    
    columns>idcolumns>
    
    algorithm>murmuralgorithm>
  rule>
tableRule>

function name="murmur"
  class="io.mycat.route.function.PartitionByMurmurHash">
  
  property name="seed">0property>
  
  
  property name="count">2property>
  
  
  property name="virtualBucketTimes">160property>
  
  
  
  
  
  
function>

实现特点

  1. 虚拟节点机制:通过将每个物理节点映射为多个虚拟节点(默认160倍),有效解决了传统哈希取模分片在节点增减时需要大量数据迁移的问题。

  2. 数据均衡性:MurmurHash算法具有优秀的随机分布特性,配合虚拟节点机制,能够确保数据在各个分片节点上均匀分布。

  3. 权重支持:可以通过weightMapFile属性为不同节点设置不同的权重,适用于节点配置不均衡的场景。

适用场景

  • 需要均匀分布数据的OLTP系统
  • 预计未来需要扩容的分片集群
  • 节点硬件配置不均衡的环境(通过权重调节)

扩容说明

当需要增加分片节点时:

  1. 调整count值为新的节点总数
  2. 重新配置weightMapFile(如使用)
  3. 系统会自动按照新的虚拟节点分布重新平衡数据

注意:实际扩容时仍需要数据迁移,但虚拟节点机制可以大幅减少需要迁移的数据量。

文章来源于互联网:Java-132 深入浅出 MySQL MyCat 使用指南:安装步骤、服务管理与分片规则详解

相关推荐: 多校区学校押金原路退回系统之免安装使用教程——东方仙盟

多校区学校押金原路退回系统专为解决多校区押金管理难题而打造。其优势显著:一是精准高效,系统能精准识别各校区学生信息,快速处理押金原路退回,大幅提升退款效率,避免人工操作失误。二是统一管理,打破校区壁垒,实现多校区押金集中化管理,便于学校整体把控资金流向。三是透…

赞(0)
未经允许不得转载:5bei.cn大模型教程网 » Java-132 深入浅出 MySQL MyCat 使用指南:安装步骤、服务管理与分片规则详解
分享到: 更多 (0)

AI大模型,我们的未来

小欢软考联系我们