目录
schema.xml
作为MyCat中最重要的配置文件之一 , 涵盖了MyCat的
逻辑库 、
表 、
分片规则、
分片节点及
数据源的配置。
一、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;
1.属性
schema 标签 的属性如下 :
name
指定逻辑库的库名 , 可以自己定义任何字符串 ;checkSQLschema
取值为true / false
;
如果设置为true时 , 如果我们执行的语句为"select * from ITCAST.TB_TEST;"
, 则
MyCat会自动把schema字符去掉, 把SQL语句修改为"select * from TB_TEST;"
可以避免SQL发送到后端数据库执行时, 报table不存在的异常 。
不过当我们在编写SQL语句时, 指定了一个不存在schema
, MyCat是不会帮我们自动去除的 ,这个时候数据库就会报错, 所以在编写SQL语句时,最好不要加逻辑库的库名, 直接查询表即可。sqlMaxLimit
当该属性设置为某个数值时,每次执行的SQL语句如果没有加上limit语句, MyCat也会自动在limit语句后面加上对应的数值 。也就是说, 如果设置了该值为100,则执行select * from TB_TEST
与select * from TB_TEST limit 100
是相同的效果 。
所以在正常的使用中, 建立设置该值 , 这样就可以避免每次有过多的数据返回。
2.子标签table
table 标签 定义了MyCat中逻辑库schema下的逻辑表 , 所有需要拆分的表都需要在table标签中定义 。
<table name="TB_TEST" dataNode="dn1,dn2,dn3" rule="auto-sharding-long" />
属性如下 :
-
name
定义逻辑表的表名 , 在该逻辑库下必须唯一。 -
dataNode
定义的逻辑表所属的dataNode
, 该属性需要与dataNode标签中的name属性的值对应。 如果一张表拆分的数据,存储在多个数据节点上,多个节点的名称使用","
分隔 。 -
rule
该属性用于指定逻辑表的分片规则的名字, 规则的名字是在rule.xml文件中定义的, 必须与tableRule标签中name属性对应。 -
ruleRequired
该属性用于指定表是否绑定分片规则, 如果配置为true, 但是没有具体的rule, 程序会报错。 -
primaryKey
逻辑表对应真实表的主键
如: 分片规则是使用主键进行分片, 使用主键进行查询时, 就会发送查询语句到配置的所有的datanode
上; 如果使用该属性配置真实表的主键, 那么MyCat会缓存主键与具体datanode
的信息,再次使用主键查询就不会进行广播式查询了, 而是直接将SQL发送给具体的datanode
。 -
type
该属性定义了逻辑表的类型,目前逻辑表只有全局表和普通表。
全局表:type的值是global
, 代表 全局表 。
普通表:无 -
autoIncrement
mysql对非自增长主键,使用last_insert_id()
是不会返回结果的,只会返回0。所以,只有定义了自增长主键的表,才可以用last_insert_id()
返回主键值。 mycat提供了自增长主键功能,但是对应的mysql节点上数据表,没有auto_increment
,那么在mycat层调用last_insert_id()
也是不会返回结果的。
如果使用这个功能, 则最好配合数据库模式的全局序列。使用autoIncrement="true"
指定该表使用自增长主键,这样MyCat才不会抛出 “分片键找不到” 的异常。autoIncrement
的默认值为false。 -
needAddLimit
指定表是否需要自动在每个语句的后面加上limit限制, 默认为true
。
参考资料:
《开源数据库中间件MyCat实战笔记》
想要快速获取资料的同学:请添加助理VX:C18173184271,备注一下CSDN+工作年限!
免费获取
以便能够充分理解学习!
二、dataNode 标签
<dataNode name="dn1" dataHost="host1" database="db1" />
dataNode标签中定义了MyCat中的数据节点, 也就是我们通常说的数据分片。一个dataNode标签就是一个独立的数据分片。
具体的属性 :
属性 | 含义 | 描述 |
---|---|---|
name | 数据节点的名称 | 需要唯一 ; 在table标签中会引用这个名字, 标识表与分片的对应关系 |
dataHost | 数据库实例主机名称 | 引用自 dataHost 标签中name属性 |
database | 定义分片所属的数据库 |
三、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逻辑库中作为底层标签存在, 直接定义了具体的数据库实例、读写分离、心跳语句。
1.属性
属性 | 含义 | 描述 |
---|---|---|
name | 数据节点名称 | 唯一标识, 供上层标签使用 |
maxCon | 最大连接数 | 内部的writeHost、readHost都会使用这个属性 |
minCon | 最小连接数 | 内部的writeHost、readHost初始化连接池的大小 |
balance | 负载均衡类型 | 取值0,1,2,3 ; 后面章节会详细介绍; |
writeType | 写操作分发方式 | 0 : 写操作都转发到第1台writeHost, writeHost1挂了, 会切换到writeHost2上;1 : 所有的写操作都随机地发送到配置的writeHost上 ; |
dbType | 后端数据库类型 | mysql, mongodb , oracle |
dbDriver | 数据库驱动 | 指定连接后端数据库的驱动,目前可选值有 native和JDBC。native执行的是二进制的MySQL协议,可以使用MySQL和MariaDB。其他类型数据库需要使用JDBC(需要在MyCat/lib目录下加入驱动jar) |
switchType | 数据库切换策略 | 取值 -1,1,2,3 ; 后面章节会详细介绍; |
2.子标签heartbeat
配置MyCat与后端数据库的心跳,用于检测后端数据库的状态。heartbeat
用于配置心跳检查语句。例如 : MySQL中可以使用 select user()
, Oracle中可以使用 select 1 from dual
等。
3.子标签writeHost、readHost
指定后端数据库的相关配置, 用于实例化后端连接池。 writeHost
指定写实例, readHost
指定读实例。
在一个dataHost
中可以定义多个writeHost和readHost。但是,如果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 是 |
如果你需要这份完整版的
《开源数据库中间件MyCat实战笔记》
,只需你多多支持我这篇文章。
多多支持,即可免费获取资料——三连之后(承诺:100%免费)
快速入手通道:添加助理VX:
C18173184271,备注一下CSDN+工作年限!
免费获取!诚意满满!!!
来源:oschina
链接:https://my.oschina.net/u/4391448/blog/4943155