mycat-schema.xml文件-配置参数-详细解释

schema .xml

schema.xml 作为MyCat中最重要的配置文件之一  , 涵盖了MyCat的逻辑库  、  表  、  分片规则、分片节点及数据源的配置

1 schema 标签

<schema name="ITCAST" checkSQLschema="false" sqlMaxLimit= "100">
	<table name="TB_TEST" dataNode="dn1 ,dn2 ,dn3" rule="auto-sharding-long" />
</schema>

schema 标签用于定义  MyCat实例中的逻辑库  , 一个MyCat实例中 , 可以有多个逻辑库  , 可以通  schema 标签来划分不同的逻辑库。MyCat中的逻辑库的概念 ,等同于MySQL中的database  , 需要操作某个逻辑库下的表时 , 也需要切换逻辑库 :
use ITCAST;

schema 标签的属性如下  :

1). name

指定逻辑库的库名  , 可以自己定义任何字符串  ;

2). checkSQLschema 取值为  true / false ;

如果设置为true  , 如果我们执行的语句为  "select * from ITCAST.TB_TEST;" , 则MyCat会自动把schema字符去掉 , 把SQL语句修改为  "select * from TB_TEST;"
可以避免SQL
发送到后端数据库执行时 , table不存在的异常 
不过当我们在编写SQL语句时 , 指定了一个不存在schema, MyCat是不会帮我们自动去除的  ,这个时候数据库就会报错 ,
所以在编写SQL语句时 ,最好不要加逻辑库的库名 , 直接查询表即可。

3). sqlMaxLimit

当该属性设置为某个数值时 ,每次执行的SQL语句如果没有加上limit语句 ,  MyCat也会自动在limit语句后面加上对应的数值  
也就是说,
  如果设置了该值为100 ,则执行  select * from
TB_TEST   select * from TB_TEST limit 100 是相同的效果 
所以在正常的使用中 , 建立设置该值  , 这样就可以避免每次有过多的数据返回。

1.1 子标签table

table 标签定义了MyCat中逻辑库schema下的逻辑表  , 所有需要拆分的表都需要在table标签中定

1   <table name="TB_TEST" dataNode="dn1 ,dn2 ,dn3" rule="auto-sharding-long" />

table标签属性如下 :

1). name

定义逻辑表的表名  , 在该逻辑库下必须唯一。

2). dataNode

定义的逻辑表所属的dataNode , 该属性需要与dataNode标签中的name属性的值对应。  如果一张 表拆分的数据,存储在多个数据节点上,多个节点的名称使用","分隔  。

3). rule

该属性用于指定逻辑表的分片规则的名字 , 规则的名字是在rule.xml文件中定义的 , 必须与 tableRule标签中name属性对应。

4). ruleRequired

该属性用于指定表是否绑定分片规则 , 如果配置为true, 但是没有具体的rule, 程序会报错。

5). primaryKey

逻辑表对应真实表的主键

: 分片规则是使用主键进行分片 , 使用主键进行查询时 , 就会发送查询语句到配置的所有的datanode; 如果使用该属性配置真实表的主键 , 那么MyCat会缓存主键与具体datanode的信息 , 再次使用主键查询就不会进行广播式查询了 , 而是直接将SQL发送给具体的datanode

6). type

该属性定义了逻辑表的类型,目前逻辑表只有全局表和普通表

全局表:type的值是  global , 代表  全局表 

普通表:无

7). autoIncrement

mysql对非自增长主键,使用last_insert_id() 是不会返回结果的,只会返回0。所以 ,只有定义了自增长主键的表,才可以用last_insert_id()返回主键值。  mycat提供了自增长主键功能,但是对应的mysql节点上数据表,没有auto_increment,那么在mycat层调用last_insert_id()也是不会返回结果的。

如果使用这个功能,  最好配合数据库模式的全局序列。使用  autoIncrement="true" 指定该表使用自增长主键 ,这样MyCat才不会抛出  "分片键找不到" 的异常。 
autoIncrement的默认值为
false。

8). needAddLimit

指定表是否需要自动在每个语句的后面加上limit限制 , 默认为true

2 dataNode 标签

<dataNode name="dn1" dataHost= "host1" database="db1" />

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

dataNode具体的属性:

属性

含义

描述


name


数据节点的名称

需要唯一  ; table标签中会引用这个名字 , 标识表与分片的对应关系

dataHost

数据库实例主机 名称

引用自  dataHost 标签中name属性

database


定义分片所属的数据库

3 dataHost 标签

<dataHost name="host1" maxCon="1000" minCon="10" balance="0"
writeType="0" dbType="mysql" dbDriver="native" switchType="1"slaveThreshold= "100">
	<heartbeat>select user ()</heartbeat>
	<writeHost host= "hostM1" url= "192.168.192.147:3306" user="root" password= "itcast"></writeHost>
</dataHost>

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

dataHost 标签的属性

 

属性

  

描述

name

              

唯一标识, 供上层标签使用

maxCon

           

内部的writeHost、 readHost都会使用这个属性

minCon

           

内部的writeHost、 readHost初始化连接池的大小

balance

              

取值0,1,2,3 ; 后面章节会详细介绍;

writeType

                 

0 : 写操作都转发到第1writeHost,
     writeHost1
挂了, 会切换 到writeHost2;
 

1 : 所有的写操作都随机地发送到配置的 writeHost ;

属性

  

描述

dbType

                 

mysql, mongodb , oracle

dbDriver

            

指定连接后端数据库的驱动 , 目前可选值有  nativeJDBCnative

执行的是二进制的MySQL协议,可以使用MySQLMariaDB。其他类型

数据库需要使用JDBC (需要在MyCat/lib目录下加入驱动jar

switchType

                 

取值  -1,1,2,3 ; 后面章节会详细介绍;

3.1 子标签heartbeat

配置MyCat与后端数据库的心跳 ,用于检测后端数据库的状态。heartbeat用于配置心跳检查语句。
例如 
MySQL中可以使用  select user(), Oracle中可以使用  select 1 from dual等

3.2 子标签writeHost、readHost

指定后端数据库的相关配置,  用于实例化后端连接池。  writeHost指定写实例,  readHost指定读实例

在一个dataHost中可以定义多个writeHostreadHost。但是, 如果writeHost指定的后端数据库宕机,那么这个writeHost绑定的所有readHost也将不可用 

属性:

属性名

含义

取值

host

实例主机标

对于writeHost一般使用  *M1
对于
readHost ,一般使
  *S1

url

后端数据库 连接地址

如果是native ,一般为  ip:port ;
如果是JDBC, 一般 jdbc:mysql://ip:port/

user

数据库用户

root

password

数据库密码

itcast

weight

权重

readHost中作为读节点权重

usingDecrypt

密码加密

默认  0   , 1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值