当前位置: 首页 > news >正文

Java-131 深入浅出 MySQL MyCat 深入解析 schema.xml 配置详解:逻辑库、逻辑表、数据节点全攻略

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

🚀 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案例 详解

请添加图片描述

schema.xml 配置

schema.xml 是 Mycat 分库分表中间件中的核心配置文件之一,主要负责定义和管理以下关键组件:

  1. 逻辑库(Schema)配置:
  • 定义虚拟数据库名称,与物理数据库解耦
  • 可配置多个逻辑库,每个对应不同业务模块
  • 示例:<schema name="ORDER_DB" checkSQLschema="true" sqlMaxLimit="100">
  1. 逻辑表(Table)配置:
  • 定义虚拟表结构,包括表名、主键等元数据
  • 支持分片表(分片规则)、全局表(所有节点冗余)、非分片表等类型
  • 示例:<table name="orders" primaryKey="id" dataNode="dn1,dn2" rule="mod-long" />
  1. 数据节点(DataNode)配置:
  • 映射逻辑表到物理数据库实例
  • 定义数据源名称和所属数据库
  • 示例:<dataNode name="dn1" dataHost="host1" database="order_db_01" />
  1. 数据主机(DataHost)配置:
  • 配置物理数据库服务器连接信息
  • 包含读写分离、心跳检测等高级功能
  • 示例:<dataHost name="host1" maxCon="1000" minCon="10" balance="1">

典型应用场景包括:

  • 电商系统订单表按月分片存储
  • 用户数据按ID哈希分片
  • 商品信息作为全局表同步到所有节点

配置注意事项:

  1. 需要与rule.xml配合使用定义分片规则
  2. 修改后需重启Mycat或执行reload命令生效
  3. 建议通过Mycat-web管理界面进行可视化配置
  4. 需要保持与真实数据库结构的同步更新

schema标签

Mycat 中的 schema 标签是配置文件中的核心元素,用于定义逻辑数据库(逻辑库)的结构和特性。在一个 Mycat 实例中可以配置多个逻辑库,每个逻辑库相当于一个独立的虚拟数据库,可以包含不同的表和数据节点配置。

schema 标签的主要属性包括:

  1. name:指定逻辑库的名称,客户端将使用这个名称进行连接
  2. checkSQLschema:布尔值,控制是否检查SQL中的schema名称
  3. sqlMaxLimit:设置默认的查询结果集最大行数限制
  4. dataNode:指定默认的数据节点

在实际应用中,schema 标签通常这样配置:

<!-- 订单业务逻辑库配置 -->
<schema name="edu_order" checkSQLschema="true" sqlMaxLimit="100" dataNode="dn1"><!-- 这里可以定义表的相关配置 --><table name="orders" primaryKey="order_id" dataNode="dn1,dn2" rule="mod-long"/>
</schema><!-- 用户业务逻辑库配置 -->
<schema name="edu_user" checkSQLschema="false" sqlMaxLimit="500" dataNode="dn3"><table name="users" type="global" dataNode="dn3,dn4"/>
</schema>

典型应用场景包括:

  1. 多租户系统:为不同租户分配独立的逻辑库
  2. 业务隔离:将订单、用户等不同业务模块分离到不同逻辑库
  3. 读写分离:为同一业务配置主从逻辑库

注意:每个逻辑库必须至少包含一个有效的 dataNode 配置,否则无法正常工作。逻辑库名称应该保持唯一性,避免与物理数据库名称冲突。

table标签

table标签是Mycat分库分表配置中定义逻辑表的核心元素,所有需要水平拆分的表都必须通过该标签进行配置。该标签的主要属性包括:

  1. name属性:指定逻辑表的名称,对应应用程序中访问的表名
  2. dataNode属性:定义该表分布的数据节点,多个节点用逗号分隔
  3. rule属性:指定分片规则,对应rule.xml中定义的规则名称
  4. primaryKey属性:声明表的主键字段
  5. autoIncrement属性:设置是否自增主键

配置示例:

<table name="b_order" dataNode="dn1,dn2" rule="b_order_rule" primaryKey="ID"autoIncrement="true"/>

典型应用场景:

  1. 电商系统中的订单表(b_order)按用户ID分片存储
  2. 日志表按时间范围分片存储
  3. 用户表按地域分片存储

注意事项:

  1. dataNode指定的节点必须在schema.xml中正确定义
  2. rule指定的分片规则必须在rule.xml中配置
  3. 对于自增主键表,建议配置全局序列号
  4. 分片字段应该选择查询频率高的字段

完整配置通常需要配合schema.xml和rule.xml文件共同完成分片逻辑的定义。

在这里插入图片描述

dataNode标签

dataNode标签是Mycat分片配置中的核心元素,用于定义数据分片节点。它建立逻辑分片与实际物理数据库实例之间的映射关系。

<!-- 数据节点配置示例 -->
<dataNode name="dn1" dataHost="edu_order_1" database="edu_order_1" />

详细参数说明:

  1. name属性:

    • 作用:定义数据节点的唯一标识名称
    • 要求:必须全局唯一,不能与其他dataNode重复
    • 使用场景:在table标签中通过该名称指定表的分片规则
    • 命名规范:建议采用"dn"+数字的格式,如dn1、dn2等,便于管理
  2. dataHost属性:

    • 作用:指定该分片节点所属的物理主机组
    • 要求:必须对应dataHost标签中已定义的name属性值
    • 示例:如果配置了<dataHost name="edu_order_1">,则dataNode可以引用该主机组
  3. database属性:

    • 作用:指定该分片节点对应的实际物理数据库名称
    • 要求:必须是目标数据库实例中真实存在的数据库
    • 注意事项:该属性值会作为实际SQL路由时的目标数据库名

典型应用场景:

  1. 水平分片场景:将user表分散到dn1、dn2、dn3三个节点
  2. 垂直分片场景:将order表放在dn1,payment表放在dn2

配置建议:

  • 建议为每个物理数据库实例创建单独的dataNode
  • 在分库分表场景中,通常需要配置多个dataNode
  • 可以通过schema.xml中的table标签将逻辑表映射到具体的dataNode

dataHost标签

dataHost 标签在 Mycat 逻辑库配置中作为最底层的核心标签,直接定义了实际的物理数据库实例连接信息及其运行策略。该标签通过详细的属性配置,实现了对后端数据库实例的精细化管理,主要包括以下关键方面:

  1. 基础连接配置

    • name:唯一标识数据主机的名称
    • dbType:指定数据库类型(如mysql/oracle等)
    • dbDriver:驱动类型(native/jdbc)
    • maxCon/minCon:连接池参数(最大100连接,最小10连接)
  2. 读写分离策略

    • balance属性支持多种模式:
      • 0:不开启读写分离
      • 1:随机读请求到所有writeHost/readHost
      • 2:读请求随机分配到writeHost对应readHost
      • 3:读请求随机分配到writeHost对应readHost且自动剔除故障节点
    • 示例中的balance="0"表示禁用读写分离
  3. 高可用配置

    • switchType:故障切换方式(1-自动切换,2-基于MySQL主从状态,3-基于手动切换)
    • slaveThreshold:从库延迟阈值(单位秒,超过则被剔除)
    • 心跳检测机制通过子标签heartbeat配置,如:<heartbeat>select user()</heartbeat>
  4. 实例定义
    通过嵌套的writeHostreadHost标签定义具体实例:

   <writeHost host="hostM1" url="192.168.0.1:3306" user="root" password="123456"><readHost host="hostS1" url="192.168.0.2:3306" user="root" password="123456"/></writeHost>

典型应用场景包括:电商系统的订单库分片部署、金融系统的读写分离集群配置、物联网设备数据的高可用存储方案等。通过合理配置这些参数,可以实现数据库访问的负载均衡、故障自动转移等关键功能。

在这里插入图片描述

heartbeat标签

在数据库中间件配置中,heartbeat标签用于指定后端数据库连接的健康检查语句。不同的数据库类型需要配置对应的SQL语句来验证连接有效性:

MySQL数据库:

  • 推荐使用SELECT user()SELECT 1等简单查询语句
  • 执行这类语句不会产生锁表或性能开销
  • 示例:
    <dataHost><heartbeat>SELECT user()</heartbeat>
    </dataHost>
    

Oracle数据库:

  • 需要使用SELECT 1 FROM dual特殊语法
  • dual是Oracle的虚拟表,专门用于这类简单查询
  • 示例:
    <dataHost><heartbeat>SELECT 1 FROM dual</heartbeat>
    </dataHost>
    

其他常见数据库的心跳语句示例:

  • PostgreSQL: SELECT 1
  • SQL Server: SELECT 1
  • DB2: SELECT 1 FROM sysibm.sysdummy1
  • MariaDB: SELECT 1

配置注意事项:

  1. 心跳语句应该尽可能简单,避免复杂查询
  2. 不要使用会产生锁的语句(如SELECT FOR UPDATE)
  3. 语句执行时间应在毫秒级完成
  4. 心跳间隔通常配置为5-10秒
  5. 超时时间建议设置为心跳间隔的2-3倍

完整配置示例:

<dataHost name="mysql_host" maxCon="1000" minCon="10" balance="1"writeType="0" dbType="mysql" dbDriver="native" switchType="1"><heartbeat>SELECT user()</heartbeat><writeHost host="master" url="192.168.1.100:3306" user="root" password="123456"><readHost host="slave" url="192.168.1.101:3306" user="root" password="123456"/></writeHost>
</dataHost>

writeHost和readHost标签

在 Mycat 数据库中间件的配置中,writeHostreadHost 是用于定义后端数据库连接的重要标签,它们共同组成 dataHost 的数据源配置单元。这两个标签的主要区别在于:

  1. 功能分工

    • writeHost 专门用于指定可执行写操作(INSERT/UPDATE/DELETE)的主数据库实例
    • readHost 专门用于指定只读操作(SELECT)的从数据库实例
    • 一个典型的读写分离配置会包含1个writeHost和多个readHost
  2. 高可用机制

    • 当主writeHost宕机时,其绑定的所有readHost都会自动失效
    • Mycat会自动检测故障并通过switchType参数指定的策略切换到备用writeHost
    • 切换过程中会触发心跳检测机制(如示例中的select user()
  3. 配置细节

    • 每个writeHost需要定义完整的连接参数:
      • host:主机标识名
      • url:数据库连接地址和端口
      • user/password:认证信息
    • 可选参数包括:
      • maxCon/minCon:连接池大小限制
      • dbType:数据库类型(如MySQL)
      • dbDriver:驱动类型(native/jdbc)

示例配置展示了最简单的单节点配置,实际生产环境通常会包含更复杂的高可用方案:

<dataHost name="order_cluster" maxCon="200" minCon="20" balance="1"writeType="1" dbType="mysql" dbDriver="native" switchType="2"slaveThreshold="100"><heartbeat>select 1 from dual</heartbeat><!-- 主写节点 --><writeHost host="M1" url="192.168.1.111:3306" user="rw_user" password="securePwd123"><!-- 从读节点 --><readHost host="S1" url="192.168.1.112:3306" user="ro_user" password="readonlyPwd"/><readHost host="S2" url="192.168.1.113:3306" user="ro_user" password="readonlyPwd"/></writeHost><!-- 备用写节点 --><writeHost host="M2" url="192.168.1.121:3306" user="rw_user" password="securePwd123"><readHost host="S3" url="192.168.1.122:3306" user="ro_user" password="readonlyPwd"/></writeHost>
</dataHost>

在这个增强版配置中:

  • 设置了主备双写节点(M1/M2)和多个读节点(S1-S3)
  • 使用更安全的心跳检测语句select 1 from dual
  • 配置了更完善的连接池参数和负载均衡策略(balance=“1”)
  • 采用更可靠的切换机制(switchType=“2”)

在这里插入图片描述

http://www.dtcms.com/a/395164.html

相关文章:

  • Vmware CentOS Docker Daemon配置代理
  • 【JAVA】java多态
  • 【AI分析进行时】大模型显存需求估算与国内开源模型实践指南
  • C++基础:(一)C++入门知识介绍(上)
  • Python项目的多语言翻译babel
  • python flask框架详解
  • 基于STM32单片机的家庭医护血氧体温血压吃药监测APP系统
  • 整合亮数据Bright Data与Dify构建自动化分析系统
  • Browser-Use+cpolar:企业网页操作自动化的无界解决方案
  • 深入理解 Elasticsearch:核心原理、性能优化与高频面试题解析
  • 【C++】Lambda表达式参数问题
  • 数学金融方向要额外学什么课?这个专业对编程和建模能力要求高吗?
  • 第二部分:VTK核心类详解(第54章 vtkVariantArray变体数组类)
  • 【2025最新】ArcGIS for JS点聚合功能实现
  • Leecode hot100 - 114. 二叉树展开为链表 基础方法到提高方法
  • 把 iOS 混淆纳入自动化测试与 CICD 从构建、回归到灰度的工程化实战
  • 初识Redis:解锁高性能缓存的魔法钥匙
  • 基于传递矩阵法计算多层结构声表面波声速
  • 中间件和分类
  • MV2DFusion:利用模态特定目标语义进行多模态三维检测
  • BeanFactory接口作用(二)
  • 速通ACM省铜第十二天 赋源码(Kirei Attacks the Estate)
  • 海外仓一件代发怎样优化拣货流程?用什么WMS能减少错拣漏拣?
  • SQL Server 定时作业
  • 大模型笔试选择题:题组1
  • 关于STL
  • clickhouse使用问题记录
  • Java 大视界:基于 Java 的大数据实时流处理在金融高频交易数据分析中的创新应用
  • 【脑电分析系列】第25篇:情绪识别与认知研究中的EEG应用:一个完整的实验设计与数据分析流程
  • Tensorflow基础——数据类型、计算图