schema.xml配置
# schema.xml配置
Mycat 中重要的配置文件之一,管理着 Mycat 的逻辑库、表、分片节点、主机等信息。
# schema标签
schema 标签用于定义 Mycat 实例中的逻辑库,Mycat 可以有多个逻辑库,每个逻辑库都有自己的相关配置。可以使用 schema 标签来划分这些不同的逻辑库。
<schema name="tb_booking" checkSQLschema="true" sqlMaxLimit="100" dataNode="dn1"></schema>
属性名 | 值 | 数量限制 | 说明 |
---|---|---|---|
dataNode | String | 0...1 | 分片节点 |
sqlMaxLimit | Integer | 1 | 查询返回的记录数限制limit |
checkSQLschema | Boolean | 1 | 是否去表库名 |
# table标签
table标签定义了 Mycat 中的逻辑表,所有需要拆分的表都需要在这个标签中定义
<table name="tb_order" dataNode="dn1,dn2" rule="tb_order_rule" primaryKey="ID" autoIncrement="true"/>
属性名 | 值 | 数量限制 | 说明 |
---|---|---|---|
name | String | 1 | 逻辑表名 |
dataNode | String | 1...* | 分片节点 |
rule | String | 0...1 | 分片规则 |
ruleRequired | Boolean | 0...1 | 是否强制绑定分片规则 |
primaryKey | String | 1 | 主键 |
type | String | 0...1 | 逻辑表类型:全局表(global)、普通表 |
autoIncrement | Boolean | 0...1 | 自增长主键 |
subTables | String | 1 | 分表 |
needAddLimit | Boolean | 0...1 | 是否为查询SQL自动加limit限制 |
# dataNode标签
dataNode标签定义了 MyCat 中的分片节点,也就是我们通常说所的数据分片。
<dataNode name="dn1" dataHost="tb_order_1" database="tb_order_1" />
属性名 | 值 | 数量限制 | 说明 |
---|---|---|---|
name | String | 1 | 定义数据节点的名字,这个名字需要是唯一的,我们需要在 table 标签上应用这个名字,来建立表与分片对应的关系。在schema标签应用这个名字,建立分片与库对应关系 |
dataHost | String | 1 | 用于定义该分片属于哪个分片主机,属性值是引用 dataHost 标签上定义的 name 属性。 |
database | String | 1 | 用于定义该分片节点属于哪个具体的库 |
# dataHost标签
dataHost标签在 Mycat 逻辑库中也是作为最底层的标签存在,直接定义了具体的数据库实例、读写分离配置和心跳语句。
<dataHost name="tb_order_1" maxCon="100" minCon="10" balance="0" writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
<heartbeat>......</heartbeat>
<writeHost>
<readHost>......</readHost>
......
</writeHost>
......
</dataHost>
属性名 | 值 | 数量限制 | 说明 |
---|---|---|---|
name | String | 1 | 节点主机名 |
maxCon | Integer | 1 | 最大连接数 |
minCon | String | 1 | 用于定义该分片节点属于哪个具体的库 |
minCon | Integer | 1 | 最小连接数 |
balance | Integer | 1 | 读操作负载均衡类型 |
writeType | Integer | 1 | 写操作负载均衡类型 |
dbType | String | 1 | 数据库类型 |
dbDriver | String | 1 | 数据库驱动 |
switchType | String | 1 | 主从切换类型,-1表示不自动切换;1表示自动切换;2表示基于MySQL主从同步状态决定是否切换;3表示基于MySQL cluster集群切换机制 |
# heartbeat标签
heartbeat标签内指明用于和后端数据库进行心跳检查的语句。例如:MySQL 可以使用 select user()
、Oracle 可以 使用 select 1 from dual
等
<dataHost ...>
<heartbeat>select user()</heartbeat>
</dataHost>
# writeHost和readHost标签
writeHost和readHost标签都指定后端数据库的相关配置给 mycat,用于实例化后端连接池。唯一不同的是,writeHost 指定写实例、readHost 指定读实例。
在一个 dataHost 内可以定义多个 writeHost 和 readHost。但是,如果 writeHost 指定的后端数据库宕机, 那么这个 writeHost 绑定的所有 readHost 都将不可用。另一方面,由于这个 writeHost 宕机会被系统自动的检测,并切换到备用的 writeHost上去。
<dataHost name="localhost1" maxCon="1000" minCon="10" balance="0"
writeType="0" dbType="mysql" dbDriver="jdbc" switchType="1" slaveThreshold="100">
<heartbeat>select user()</heartbeat>
<!-- can have multi write hosts -->
<writeHost host="hostM1" url="jdbc:mysql://localhost:3306" user="root"
password="root">
</writeHost>
<!-- <writeHost host="hostM2" url="localhost:3316" user="root" password="123456"/> -->
</dataHost>
属性名 | 值 | 数量限制 | 说明 |
---|---|---|---|
host | String | 1 | 主机名 |
url | String | 1 | 连接字符串 |
password | String | 1 | 密码 |
user | String | 1 | 用户名 |
weight | String | 1 | 权重 |
usingDecrypt | String | 1 | 是否对密码加密,默认0 |
balance参数:
值 | 说明 |
---|---|
0 | 所有读操作都发送到当前可用的writeHost |
1 | 所有读操作都随机发送到readHost和stand by writeHost |
2 | 所有读操作都随机发送到writeHost和readHost |
3 | 所有读操作都随机发送到writeHost对应的readHost上,但是writeHost不负担读压力 |
writeType参数:
值 | 说明 |
---|---|
0 | 所有写操作都发送到可用的writeHost |
1 | 所有写操作都随机发送到readHost |
2 | 所有写操作都随机发送到writeHost,readHost |
上次更新: 5/30/2023, 11:42:20 PM