Jw
首页
技术
英语
首页
技术
英语
  • MySQL

    • MySQL 基础
    • 环境变量配置(PATH)
    • SQL 语法与分类
    • MySQL 数据类型
    • SQL - DDL 数据定义语言
    • SQL - DML 数据操作语言
    • SQL - DQL 数据查询语言
    • SQL - DCL 数据控制语言
    • MySQL 函数
    • SQL 约束
    • SQL 外键约束
    • 多表关系
    • 多表查询(连接查询)
    • 隐式内连接 vs 显式内连接
    • 子查询
    • 多表查询案例
    • 事务
    • 并发事务问题与隔离级别
    • MySQL 体系结构与存储引擎
    • 索引概述
    • 索引结构
    • 索引分类
    • 索引语法
    • SQL 性能分析
    • 索引使用
    • 索引设计原则
    • SQL 优化 - 插入数据与主键优化
    • SQL 优化 - order by 与 group by
    • SQL 优化 - limit / count / update
    • 视图
    • 存储过程
    • 存储过程 - 变量
    • 存储过程 - 流程控制、游标与条件处理
    • 存储函数
    • 触发器
    • 锁概述与全局锁
    • 表级锁
    • 行级锁
    • InnoDB 逻辑存储结构
    • InnoDB 架构
    • 事务原理(redo / undo log)
    • MVCC
    • MySQL 系统数据库
    • MySQL 常用工具
    • 数据备份与导入导出
    • 错误日志与二进制日志
    • 查询日志与慢查询日志
    • 主从复制 - 概述与原理
    • 主从复制 - 搭建
    • Mycat 配置
    • Mycat 垂直拆分与水平拆分
    • Mycat 分片规则
    • Mycat 管理与监控
    • Mycat 读写分离 - 一主一从
    • Mycat 读写分离 - 双主双从

Mycat 配置

Mycat 的核心配置只有三个文件:schema.xml 定逻辑库 / 表 / 数据节点 / 数据主机,rule.xml 定分片算法,server.xml 定系统参数与登录用户。

一、配置文件总览

文件作用
schema.xml逻辑库、逻辑表、分片节点(dataNode)、数据库实例(dataHost)
rule.xml所有拆分表的规则:tableRule + function
server.xml系统配置(system)与用户权限(user)

二、schema.xml

2.1 整体结构

<mycat:schema xmlns:mycat="http://io.mycat/">
    <schema name="DB01" checkSQLschema="true" sqlMaxLimit="100">
        <table name="TB_ORDER" dataNode="dn1,dn2,dn3" rule="auto-sharding-long" />
    </schema>

    <dataNode name="dn1" dataHost="dhost1" database="db01" />
    <dataNode name="dn2" dataHost="dhost2" database="db01" />
    <dataNode name="dn3" dataHost="dhost3" database="db01" />

    <dataHost name="dhost1" maxCon="1000" minCon="10" balance="0"
              writeType="0" dbType="mysql" dbDriver="jdbc">
        <heartbeat>select user()</heartbeat>
        <writeHost host="master" url="jdbc:mysql://1.2.3.5:3306?useSSL=false&amp;serverTimezone=Asia/Shanghai&amp;characterEncoding=utf8"
                   user="root" password="你的密码" />
    </dataHost>

    <dataHost name="dhost2" maxCon="1000" minCon="10" balance="0"
              writeType="0" dbType="mysql" dbDriver="jdbc">
        <heartbeat>select user()</heartbeat>
        <writeHost host="master" url="jdbc:mysql://1.2.3.6:3306?useSSL=false&amp;serverTimezone=Asia/Shanghai&amp;characterEncoding=utf8"
                   user="root" password="你的密码" />
    </dataHost>

    <dataHost name="dhost3" maxCon="1000" minCon="10" balance="0"
              writeType="0" dbType="mysql" dbDriver="jdbc">
        <heartbeat>select user()</heartbeat>
        <writeHost host="master" url="jdbc:mysql://1.2.3.7:3306?useSSL=false&amp;serverTimezone=Asia/Shanghai&amp;characterEncoding=utf8"
                   user="root" password="你的密码" />
    </dataHost>
</mycat:schema>

url 中的 & 在 XML 中必须写成 &amp;,否则解析失败。

2.2 dataNode 标签

dataNode 标签定义了 MyCat 中的数据节点,也就是通常说的数据分片;一个 dataNode 标签就是一个独立的数据分片。

属性含义
name定义数据节点名称
dataHost数据库实例主机名称,引用 dataHost 标签中 name 属性
database定义分片所属数据库

2.3 dataHost 标签

dataHost 标签在 MyCat 逻辑库中作为底层标签存在,直接定义了具体的数据库实例、读写分离、心跳语句。

属性含义
name唯一标识,供上层标签使用
maxCon / minCon最大连接数 / 最小连接数
balance负载均衡策略,取值 0、1、2、3
writeType写操作分发方式:0 转发到第一个 writeHost,第一个挂了切换到第二个;1 随机分发到配置的 writeHost
dbType数据库类型,如 mysql
dbDriver数据库驱动,支持 native、jdbc
<dataHost name="dhost1" maxCon="1000" minCon="10" balance="0"
          writeType="0" dbType="mysql" dbDriver="jdbc">
    <heartbeat>select user()</heartbeat>
    <writeHost host="master" url="jdbc:mysql://1.2.3.5:3306?useSSL=false"
               user="root" password="你的密码" />
</dataHost>

三、rule.xml

rule.xml 中定义所有拆分表的规则,使用过程中可以灵活使用分片算法,或者对同一个分片算法使用不同的参数,让分片过程可配置化。主要包含两类标签:tableRule、function。

<tableRule name="auto-sharding-long">
    <rule>
        <columns>id</columns>
        <algorithm>rang-long</algorithm>
    </rule>
</tableRule>

<function name="rang-long" class="io.mycat.route.function.AutoPartitionByLong">
    <property name="mapFile">autopartition-long.txt</property>
</function>

autopartition-long.txt:

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

tableRule 的 algorithm 值与 function 的 name 必须对应;具体算法见 Mycat 分片规则。

四、server.xml

server.xml 包含 MyCat 的系统配置信息,主要有两个重要标签:system、user。

4.1 system 标签

<system>
    <property name="nonePasswordLogin">0</property>
    <property name="useHandshakeV10">1</property>
    <property name="useSqlStat">1</property>
</system>
属性含义
nonePasswordLogin是否允许无密码登录
useHandshakeV10握手协议版本
useSqlStat是否开启实时统计(Mycat-eye 监控需要)

4.2 user 标签

<user name="root" defaultAccount="true">
    <property name="password">你的密码</property>
    <property name="schemas">DB01</property>

    <!-- 表级 DML 权限设置 -->
    <!--
    <privileges check="false">
        <schema name="TESTDB" dml="0110">
            <table name="tb01" dml="0000"></table>
            <table name="tb02" dml="1111"></table>
        </schema>
    </privileges>
    -->
</user>

<user name="user">
    <property name="password">你的密码</property>
    <property name="schemas">DB01</property>
    <property name="readOnly">true</property>
</user>
配置含义
user name用户名
password密码
schemas该用户可以访问的逻辑库,多个库之间用逗号分隔
readOnly是否只读,默认 false
privileges check是否开启 DML 权限检查,默认 false
schema dml / table dml指定逻辑库 / 逻辑表的权限,就近原则

dml 的 4 位依次对应 IUSD(增、改、查、删),1 为有权限、0 为无权限。

速查

<!-- schema.xml:逻辑库 → 表 → 分片节点 -->
<schema name="DB01" checkSQLschema="true" sqlMaxLimit="100">
    <table name="TB_ORDER" dataNode="dn1,dn2,dn3" rule="auto-sharding-long" />
</schema>

<!-- 一个 dataNode 就是一个分片 -->
<dataNode name="dn1" dataHost="dhost1" database="db01" />

<!-- dataHost:实例、连接数、读写分离、心跳 -->
<dataHost name="dhost1" maxCon="1000" minCon="10" balance="0"
          writeType="0" dbType="mysql" dbDriver="jdbc">
    <heartbeat>select user()</heartbeat>
    <writeHost host="master" url="jdbc:mysql://1.2.3.5:3306" user="root" password="你的密码" />
</dataHost>
<!-- rule.xml:规则名 → 字段 + 算法;算法名 → 实现类 + 参数 -->
<tableRule name="auto-sharding-long">
    <rule><columns>id</columns><algorithm>rang-long</algorithm></rule>
</tableRule>
<function name="rang-long" class="io.mycat.route.function.AutoPartitionByLong">
    <property name="mapFile">autopartition-long.txt</property>
</function>
文件记什么
schema.xml逻辑库 / 表 ↔ dataNode ↔ dataHost
rule.xmltableRule.algorithm = function.name
server.xml用户、可访问逻辑库、DML 权限、实时统计

相关

  • Mycat 垂直拆分与水平拆分:拆分场景与 schema 配置
  • Mycat 分片规则:范围、取模、一致性 hash 等
  • Mycat 管理与监控:8066 / 9066 端口与 Mycat-eye
  • 主从复制 - 搭建:dataHost 读写分离的底层主从
最近更新: 2026/10/25 21:59
Contributors: liujw
Prev
主从复制 - 搭建
Next
Mycat 垂直拆分与水平拆分