Mycat关键配置记录
一、schema.xml文件配置
1、<schema>标签
name属性
mycat逻辑库的数据库名称
checkSQLschema属性
校验SQL是否带了schema。默认为false;
当设置为true时,会自动去除SQL语句中的用户名。
eg:
select * from examdb.table1;
执行时会自动去除examdb用户名
--> select * from table1;
sqlMaxLimit属性
设置此属性后,若sql未携带limit,则mycat会自动添加limit对应的值
2、<table>标签
name属性
mycat逻辑表名称
dataNode属性
当前逻辑表所属的dataNode名称,可填写多个dataNode(逗号分隔),若填写的dataNode个数过多,可用简写的方式描述。此项可用于分库操作。
eg:
<table name="TABLE1" dataNode="testdn$0-99,testdn2$100-199"></table>
rule属性
指定当前逻辑表要使用的规则名称,名称取值于rule.xml配置文件中tableRule标签的name属性。
ruleRequired属性
设置当前逻辑表是否必须指定分片规则,若设置为true,则rule属性必填。
primaryKey属性
当前逻辑表对应真实表的主键。
特别说明:
若当前逻辑表绑定了非主键分片的规则时,那么使用主键进行查询时,mycat会发送SQL语句至所有配置的dataNode上。如果使用primaryKey属性配置真实表的主键,那么mycat会缓存主键与具体dataNode的信息,再次使用主键进行查询时就不会广播式查询,mycat会发送SQL语句至具体的dataNode上。
type属性
当前逻辑表的类型。默认为 普通表;设置仅可填global(全局表)。
autoIncrement属性
当前逻辑表主键自增长开关。默认为 false(禁用);设置为true时,mycat会取当前逻辑表对应的全局序列(存在分片的情况,故取全局序列)进行自增并给值。
subTables属性
设置当前逻辑表的分表规则,目前分表功能仅mycat1.6版本后支持,且dataNode在分表条件下时只能配置一个,分表条件下不支持各种条件的join语句。
eg:
<table name="TABLE1" subTables="TABLE$1-3,TABLE4"></table>
needAddLimit属性
指定当前逻辑表是否需要自动在每个SQL语句后添加limit限制。默认为true,可设置为false将其关闭。
3、childTable标签 (此标签用于定义E-R分片的子表)
name属性
子逻辑表的名称
joinKey属性
插入子表的时候回使用这个列的值查找父表存储的数据节点
parentKey属性
父逻辑表关联的列名。程序首先获取joinkey的值,再通过parentKey属性指定的列名产生查询语句,通过执行该语句得到父表存储在哪个分片上。从而确定子表存储的位置。
primaryKey属性
当前逻辑表对应真实表的主键。
needAddLimit属性
指定当前逻辑表是否需要自动在每个SQL语句后添加limit限制。默认为true,可设置为false将其关闭。
4、dataNode标签
dataNode标签定义了mycat的数据分片,一个dataNode就是一个独立的数据分片。
name属性
数据节点的名称
dataHost属性
指定当前分片属于哪个数据库实例
dataBase属性
指定当前分片属于数据库实例的哪个具体库
5、dataHost标签
dataHost标签定义了具体的数据库实例、读写分离配置和心跳语句
name属性