MyCat配置详解
MyCat配置
1. server.xml配置
Server.xml保存了mycat需要的所有的系统配置信息,代码映射为SystemConfig类。 标签主要有三个:
system,user,firewarll
1.1 user标签
1.1.1 property标签
<user name="test"> <!--用户名是test-->
<property name="password">password</property><!--密码是password-->
<property name="schemas">TESTDB</property><!-- 使用的schema是TESTDB-->
示例 | 说明 |
---|---|
用户密码是test | |
可访问的schema有db1,db2 | |
是否只读 | |
连接上限,降级权值 | |
是否对密码加密默认 0 否 如需要开启配置 1, |
1.1.2 privileges标签
对用户的 schema以及表进行精细化的DML权限控制。
<privileges check="false">
check表示是否开启DML权限检查。默认是关闭。
dml顺序说明
iinsert,update,select,delete
<schema name="db1" dml="0110" >
<table name="tb01" dml="0000"></table>
<table name="tb02" dml="1111"></table>
</schema>
db1的权限是update,select。
tb01的权限是啥都不能干。
tb02的权限是insert,update,select,delete。
其他表默认是udpate,select。
1.2 system标签
这个标签内嵌套的所有 property 标签都与系统配置有关。
1.3 firewarll标签
防火墙配置
<firewall>
<whitehost>
<host host="127.0.0.1" user="root"/>
<host host="127.0.0.2" user="root"/>
</whitehost>
<blacklist check="false">
</blacklist>
</firewall>
2. schema.xml配置
这个文件是MyCat最重要的配置文件,负责管理库,表,分片规则,DataNode ,DataSource。
主要包含的标签有:
schema,dataNode,dataHost
2.1 schema标签
<schema name="db1" checkSQLschema="false" sqlMaxLimit="100"></schema>
schema 标签用于定义 MyCat 实例中的逻辑库,MyCat 可以有多个逻辑库,每个逻辑库都有自己的相关配置。可以使用 schema 标签来划分这些不同的逻辑库。
<schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100"></schema>
<schema name="USERDB" checkSQLschema="false" sqlMaxLimit="100"></schema>
<!--查询这两个不同的逻辑库中表的时候需要切换到该逻辑库下才可以查询到所需要的表 -->
heckSQLschema:
这个属性默认就是false,官方文档的意思就是是否去掉表前面的数据库的名称,”select * from db1.testtable” ,设置为true就会去掉db1。但是如果db1的名称不是schema的名称,那么也不会被去掉,因此官方建议不要使用这种语法。同时默认设置为false。
sqlMaxLimit:
当该值设置为某个数值时。每条执行的 SQL 语句,如果没有加上 limit 语句,MyCat 也会自动的加上所对应的值。例如设置值为 100,执行”select * from test_table”,则效果为“selelct * from test_table limit 100;”。如果运行的schema为非切分库,该属性不会生效
2.1.1 table标签
<table name="travelrecord" dataNode="dn1,dn2,dn3" rule="auto-sharding-long" ></table>
Table 标签定义了 MyCat 中的逻辑表,所有需要拆分的表都需要在这个标签中定义。
table 标签的相关属性:
属性 | 说明 |
---|---|
name | 该属性定义逻辑表的表名 |
dataNode | 该属性定义这个逻辑表所属的 dataNode, 该属性的值需要和 dataNode 标签中 name 属性的值相互对应。 |
rule | 该属性用于指定逻辑表要使用的规则名字,规则名字在 rule.xml 中定义,必须与 tableRule 标签中 name 属性属性值一一对应 |
ruleRequired | 该属性用于指定表是否绑定分片规则,如果配置为 true,但没有配置具体 rule 的话 ,程序会报错。 |
primaryKey | 该逻辑表对应真实表的主键 |
type | 该属性定义了逻辑表的类型,目前逻辑表只有“全局表”和”普通表”两种类型。全局表定义type=”global”,不定义的就是普通表。 |
autoIncrement | 主键是否自增长。 |
subTables | 分表,分表目前不支持Join。 |
needAddLimit | 是否自动添加limit,默认是开启状态。 |
2.1.2 childTable标签
<table name="customer" primaryKey="ID" dataNode="dn1,dn2" rule="sharding-by-intfile">
<childTable name="c_a" primaryKey="ID" joinKey="customer_id" parentKey="id" />
</table>
childTable 标签用于定义 E-R 分片的子表。通过标签上的属性与父表进行关联。
属性说明:
属性 | 说明 |
---|---|
name | 子表的名称 |
joinKey | 子表中字段的名称 |
parentKey | 父表中字段名称 |
primaryKey | 该逻辑表对应真实表的主键 |
needAddLimit | 是否自动添加limit,默认是开启状态。 |
2.2 dataNode标签
dataNode 标签定义了 MyCat 中的数据节点,也就是我们通常说所的数据分片。一个 dataNode 标签就是一个独立的数据分片。
<dataNode name="dNode1" dataHost="dHost128" database="db1" ></dataNode>
示例中所表述的意思为:使用名字为 dHost128数据库实例上的 db1 物理数据库,这就组成一个数据分片,最后,我们使用名字 dNode1标识这个分片。
dataNode 标签的相关属性:
属性 | 说明 |
---|---|
name | 定义数据节点的名字,这个名字需要是唯一的 |
dataHost | 该属性用于定义该分片属于哪个数据库实例 |
database | 该属性用于定义该分片属性哪个具体数据库实例上的具体库 |
2.3 dataHost标签
该标签定义了具体的数据库实例、读写分离配置和心跳语句。
<dataHost name="localhost1" maxCon="1000" minCon="10" balance="0" writeType="0" dbType="mysql" dbDriver="native">
<heartbeat>select user()</heartbeat>
<writeHost host="hostM1" url="localhost:3306" user="root" password="123456">
</writeHost>
</dataHost>
dataHost 标签的相关属性:
属性 | 说明 |
---|---|
name | 唯一标识 dataHost 标签,供上层的标签使用 |
maxCon | 指定每个读写实例连接池的最大连接。 |
minCon | 指定每个读写实例连接池的最小连接,初始化连接池的大小。 |
balance | 负载均衡类型,目前的取值有4 种: “0”, 不开启读写分离机制,所有读操作都发送到当前可用的 writeHost 上。 “1”,全部的 readHost 与 stand by writeHost 参与 select 语句的负载均衡,简单的说,当双主双从模式(M1->S1,M2->S2,并且 M1 与 M2 互为主备),正常情况下,M2,S1,S2 都参与 select 语句的负载均衡。”2”,所有读操作都随机的在 writeHost、readhost 上分发。”3”,所有读请求随机的分发到 wiriterHost 对应的 readhost 执行,writerHost 不负担读压writeType 1. writeType=”0”, 所有写操作发送到配置的第一个 writeHost,第一个挂了切到还生存的第二个writeHost,重新启动后已切换后的为准,切换记录在配置文件中:dnindex.properties .2. writeType=”1”,所有写操作都随机的发送到配置的 writeHost,1.5 以后废弃不推荐。默认0就好了! |
dbType | 指定后端连接的数据库类型,目前支持二进制的 mysql 协议,还有其他使用 JDBC 连接的数据库。例如:mongodb、oracle、spark 等. |
dbDriver | 指定连接后端数据库使用的 Driver,目前可选的值有 native 和 JDBC。使用 native 的话,因为这个值执行的是二进制的 mysql 协议,所以可以使用 mysql 和 maridb。其他类型的数据库则需要使用 JDBC 驱动来支持。 |
switchType | “-1” 表示不自动切换; “1” 默认值,自动切换; “2” 基于 MySQL 主从同步的状态决定是否切换心跳语句为 show slave status; “3” 基于 MySQL galary cluster 的切换机制(适合集群)(1.4.1)心跳语句为 show status like ‘wsrep%’. |
tempReadHostAvailable | 如果配置了这个属性 writeHost 下面的 readHost 仍旧可用,默认 0 可配置(0、1)。 |
2.3.1 heartbeat标签
这个标签内指明用于和后端数据库进行心跳检查的语句。
例如:MYSQL 可以使用 select user(),Oracle 可以使用 select 1 from dual 等。
2.3.2 writeHost 和readHost 标签
这两个标签都指定后端数据库的相关配置,用于实例化后端连接池。唯一不同的是,writeHost 指定写实例、readHost 指定读实例。
属性说明:
属性 | 说明 |
---|---|
host | 用于标识不同实例,一般 writeHost 我们使用M1,readHost 我们用S1。 |
url | 后端实例连接地址。Native:地址:端口 JDBC:jdbc的url |
password | 后端存储实例需要的密码 |
user | 后端存储实例需要的用户名字 |
weight | 权重 配置在 readhost 中作为读节点的权重 |
usingDecrypt | 是否对密码加密,默认0 |
3. rule.xml配置
rule.xml 里面就定义了我们对表进行拆分所涉及到的规则定义。
<tableRule name="date">
<rule>
<columns>indate</columns>
<algorithm>sharding-by-date</algorithm>
</rule>
</tableRule>
<function name="sharding-by-date" class="io.mycat.route.function.PartitionByDate">
<property name="dateFormat">yyyy-MM-dd</property>
<property name="sBeginDate">2019-01-01</property>
<property name="sPartionDay">30</property>
</function>
3.1 tableRule标签
属性 name指定唯一的名字,用于标识不同的表规则。
内嵌的 rule 标签则指定对物理表中的哪一列进行拆分和使用什么路由算法。
标签 | 说明 |
---|---|
columns | 要拆分的列名称 |
algorithm | 使用function标签中name属性,连接表规则的路由算法 |
3.2 function标签
name属性:指定算法名字
class属性:制定路由算法的类名
property标签:具体算法所需要用到的一些属性