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&serverTimezone=Asia/Shanghai&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&serverTimezone=Asia/Shanghai&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&serverTimezone=Asia/Shanghai&characterEncoding=utf8"
user="root" password="你的密码" />
</dataHost>
</mycat:schema>
url中的&在 XML 中必须写成&,否则解析失败。
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.xml | tableRule.algorithm = function.name |
server.xml | 用户、可访问逻辑库、DML 权限、实时统计 |
相关
- Mycat 垂直拆分与水平拆分:拆分场景与 schema 配置
- Mycat 分片规则:范围、取模、一致性 hash 等
- Mycat 管理与监控:8066 / 9066 端口与 Mycat-eye
- 主从复制 - 搭建:dataHost 读写分离的底层主从