Mycat配置之schema.xml

Mycat配置之schema.xml

在这里插入图片描述

dataNode 该属性用于绑定逻辑库到某个具体的数据节点上

 <schema name="USERDB" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn2"> 
<!—配置需要分片的表-->
 <table name=“temp” dataNode=”dn1”/> 
</schema> 

那么现在tuser就绑定到dn1所配置的具体database上,可以直接访问这个database,没有配置的表则会走默认节点dn2,这里注意没有配置在分片里面的表工具查看无法显示,但是可以正常使用。 该属性的值需要和dataNode标签中name属性的值相互对应

checkSQLschema 当该值设置为true时,如果我们执行语句select * from TESTDB.travelrecord;则MyCat会把语句修改为select * from travelrecord;。即把表示schema的字符去掉,避免发送到后端数据库执行时报(ERROR 1146 (42S02): Table ‘testdb.travelrecord’ doesn’t exist)。不过,即使设置该值为 true ,如果语句所带的是并非是schema指定的名字,例如:select * from db1.travelrecord;那么MyCat并不会删除db1这个字段,如果没有定义该库的话则会报错,所以在提供SQL语句的最好是不带这个字段。 当设置为false时,则会把语句原封不动的发往最终的MySQL执行
sqlMaxLimit 当该schema中有分片表时,才会生效 当该值设置为某个数值时。每条执行的SQL语句,如果没有加上limit语句,MyCat也会自动的加上所对应的值。例如设置值为100,执行**select * from TESTDB.travelrecord;的效果为和执行
select * from TESTDB.travelrecord limit 100;**相同。

比如配置如下:

<?xml version="1.0"?> 
<!DOCTYPE mycat:schema SYSTEM "schema.dtd"> 
<mycat:schema xmlns:mycat="http://io.mycat/"> 
<schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1"> 
</schema> 
<dataNode name="dn1" dataHost="node1" database="course2" /> 
<dataHost name="node1" maxCon="1000" minCon="10" balance="1" writeType="0" dbType="mysql" dbDriver="native" switchType="1"> 
<heartbeat>select user()</heartbeat> 
<writeHost host="master1" url="10.0.0.210:3306" user="root" password="123456"> 
</writeHost> 
</dataHost> 
</mycat:schema> 

重新启动Mycat之后
在这里插入图片描述

create user 'root'@'%' identified with mysql_native_password by '123456';
grant all on *.* to 'root'@'%';

连接Mycat:
[mysql@vmware1 bin]$ ./mysql -u root -p -P 8066 -h 127.0.0.1 --default-auth=mysql_native_password
(8.0需要加上默认加密方式)

table标签

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

Table 标签定义了MyCat中的逻辑表,所有需要拆分的表都需要在这个标签中定义。 rule属性 该属性用于指定逻辑表要使用的规则名字,规则名字在rule.xml中定义,必须与tableRule标签中name属性属性值一一对应。 type属性 该属性定义了逻辑表的类型,目前逻辑表只有“全局表”和”普通表”两种类型。对应的配置:
全局表:global。
普通表:不指定该值为globla的所有表。

dataNode标签
dataNode 标签定义了MyCat中的数据节点,用于绑定逻辑库到某个具体的database。
dataNode 标签定义了MyCat中的数据节点,也就是我们通常说所的数据分片。一个dataNode标签就是一个独立的数据分片。 例子中所表述的意思为:使用名字为lch3307数据库实例上的db1物理数据库,这就组成一个数据分片,最后,我们使用名字dn1标识这个分片。
name属性
定义数据节点的名字,这个名字需要是唯一的,我们需要在table标签上应用这个名字,来建立表与分片对应的关系。
dataHost属性
该属性用于定义该分片属于哪个数据库实例的,属性值是引用dataHost标签上定义的name属性。 database属性
该属性用于定义该分片属性哪个具体数据库实例上的具体库,因为这里使用两个纬度来定义分片,就是:实例+具体的库。因为每个库上建立的表和表结构是一样的。所以这样做就可以轻松的对表进行水平拆分。

<?xml version="1.0"?> 
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
 <mycat:schema xmlns:mycat="http://io.mycat/"> <schema name="TESTDB" checkSQLschema="true" sqlMaxLimit="100" dataNode="dn1"> 
</schema> <schema name="TESTDB2" checkSQLschema="true" sqlMaxLimit="100" dataNode="dn2"> 
</schema> 
<dataNode name="dn1" dataHost="node1" database="course5" /> 
<dataNode name="dn2" dataHost="node1" database="course55" /> 
<dataHost name="node1" maxCon="1000" minCon="10" balance="1" writeType="0" dbType="mysql" dbDriver="native" switchType="1"> 
	<heartbeat>select user()</heartbeat> 
	<writeHost host="master1" url="192.168.237.128:3308" user="root" password="mysql"> 	</writeHost> 
</dataHost> 
</mycat:schema>  

dataHost标签
作为Schema.xml中最后的一个标签,该标签在mycat逻辑库中也是作为最底层的标签存在,直接定义了具体的数据库实例、读写分离配置和心跳语句

<?xml version="1.0"?> 
<!DOCTYPE mycat:schema SYSTEM "schema.dtd"> 
<mycat:schema xmlns:mycat="http://io.mycat/"> 
<schema name="TESTDB" checkSQLschema="true" sqlMaxLimit="100" dataNode="dn1"> </schema> 
<schema name="TESTDB2" checkSQLschema="true" sqlMaxLimit="100" dataNode="dn2"> </schema> 
<dataNode name="dn1" dataHost="node1" database="test" /> 
<dataNode name="dn2" dataHost="node1" database="test2" /> <dataHost name="node1" maxCon="10" minCon="5" balance="1" writeType="0" dbType="mysql" dbDriver="native" switchType="1"> 
	<heartbeat>select user()</heartbeat> 
	<writeHost host="master1" url="192.168.237.128:3308" user="root" password="mysql"> 	
	<readHost host="slave1" url="192.168.237.130:3308" user="root" password="mysql" /> 
</writeHost> 
</dataHost> 
</mycat:schema> 
 

在这里插入图片描述

host属性
用于标识不同实例,一般writeHost我们使用M1,readHost我们用S1。
url属性
后端实例连接地址,如果是使用native的dbDriver,则一般为address:port这种形式。用JDBC或其他的dbDriver,则需要特殊指定。当使用JDBC时则可以这么写:
jdbc:mysql://localhost:3306/。
user属性 后端存储实例需要的用户名字
password属性 后端存储实例需要的密码
weight 属性 权重 配置在readhost 中作为读节点的权重

writeType属性
负载均衡类型,目前的取值有2种:

  1. writeType=“0”, 所有写操作发送到配置的第一个writeHost,第一个挂了切到还生存的第二个writeHost,重新启动后已切换后的为准,切换记录在配置文件中:dnindex.properties .
  2. writeType=“1”,所有写操作都随机的发送到配置的writeHost,但不推荐使用
<?xml version="1.0"?> 
<!DOCTYPE mycat:schema SYSTEM "schema.dtd"> 
<mycat:schema xmlns:mycat="http://io.mycat/"> 
<schema name="TESTDB" checkSQLschema="true" sqlMaxLimit="100" dataNode="dn1"> </schema> 
<schema name="TESTDB2" checkSQLschema="true" sqlMaxLimit="100" dataNode="dn2"> </schema> 
<dataNode name="dn1" dataHost="node1" database="test" /> 
<dataNode name="dn2" dataHost="node1" database="test2" /> 
<dataHost name="node1" maxCon="10" minCon="5" balance="2" writeType="0" dbType="mysql" dbDriver="native" switchType="1"> 
<heartbeat>select user()</heartbeat> 
<writeHost host="master1" url="192.168.237.128:3308" user="root" password="mysql"> </writeHost> 
<writeHost host="salve1" url="192.168.237.130:3308" user="root" password="mysql"> 
</writeHost> 
</dataHost> 
</mycat:schema> 

switchType属性
-1 表示不自动切换
1 默认值,自动切换
2 基于MySQL主从同步的状态决定是否切换 ,心跳语句为 show slave status

<?xml version="1.0"?> 
<!DOCTYPE mycat:schema SYSTEM "schema.dtd"> 
<mycat:schema xmlns:mycat="http://io.mycat/"> <schema name="TESTDB" checkSQLschema="true" sqlMaxLimit="100" dataNode="dn1"> 
</schema> 
<schema name="TESTDB2" checkSQLschema="true" sqlMaxLimit="100" dataNode="dn2"> </schema> 
<dataNode name="dn1" dataHost="node1" database="test" /> 
<dataNode name="dn2" dataHost="node1" database="test2" /> 
<dataHost name="node1" maxCon="10" minCon="5" balance="2" writeType="0" dbType="mysql" dbDriver="native" switchType="-1"> 
	<heartbeat>select user()</heartbeat> 
<writeHost host="master1" url="192.168.237.128:3308" user="root" password="mysql"> 	</writeHost> 
	<writeHost host="salve1" url="192.168.237.130:3308" user="root" password="mysql"> 
	</writeHost> 
</dataHost> 
</mycat:schema> 
```![在这里插入图片描述](https://img-blog.csdnimg.cn/2020082917044167.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQwOTMyNzQw,size_16,color_FFFFFF,t_70#pic_center)
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200829170502554.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQwOTMyNzQw,size_16,color_FFFFFF,t_70#pic_center)


 
 

**tempReadHostAvailable属性** 
如果配置了这个属性writeHost 下面的readHost仍旧可用,默认0,可配置(0、1) 

```powershell
<?xml version="1.0"?> 
<!DOCTYPE mycat:schema SYSTEM "schema.dtd"> 
<mycat:schema xmlns:mycat="http://io.mycat/"> 
<schema name="TESTDB" checkSQLschema="true" sqlMaxLimit="100" dataNode="dn1"> </schema> 
<dataNode name="dn1" dataHost="node1" database="test" /> 
<dataHost name="node1" maxCon="10" minCon="5" balance="1" writeType="0" dbType="mysql" dbDriver="native" switchType="1" tempReadHostAvailable="1">
 	<heartbeat>select user()</heartbeat> 
	<writeHost host="master1" url="192.168.237.128:3308" user="root" password="mysql"> 	<readHost host="salve1" url="192.168.237.130:3308" user="root" password="mysql" /> 
	</writeHost> 
</dataHost> 
</mycat:schema> 

在这里插入图片描述

server.xml中重点需要关注的标签是用于定义登录mycat的用户和权限

<user name="test">
 <property name="password">test</property> <property name="schemas">TESTDB</property> <property name="readOnly">true</property> <property name="benchmark">11111</property> <property name="usingDecrypt">1</property> 
</user> 

上面的例子中,我定义了一个用户,用户名为test、密码也为test,可访问的schema也只有TESTDB一个。 如果我在schema.xml中定义了多个schema,那么这个用户是无法访问其他的schema。在mysql客户端看来则是无法使用use切换到这个其他的数据库。
如果使用了use命令,则mycat会报出这样的错误提示: ERROR 1044 (HY000): Access denied for user ‘test’ to database ‘xxx’

这个标签嵌套的property标签则是具体声明的属性值,正如上面的例子。我们可以:
•修改user标签的name属性来指定用户名;
•修改password内的文本来修改密码;
•修改readOnly为true 或false来限制用户是否只是可读的;
•修改schemas内的文本来控制用户可放问的schema;
•修改schemas内的文本来控制用户可访问的schema,同时访问多个schema的话使用逗号隔开, 例如: TESTDB,db1,db2

目前Mycat对于中间件的连接控制并没有做太复杂的控制,目前只做了中间件逻辑库级别的读写权限控制。

<user name="mycat"> 
<property name="password">mycat
</property> <property name="schemas">order</property> 
<property name="readOnly">true</property> 
</user> 
<user name="mycat2"> 
<property name="password">mycat</property> 
<property name="schemas">order</property> 
</user> 

配置说明: 配置中name是应用连接中间件逻辑库的用户名。 mycat 中password是应用连接中间件逻辑库的密码。 schemas是应用当前连接的逻辑库,schemas中可以配置一个或多个。 readOnly是应用连接中间件逻辑库所具有的权限。true为只读,false为读写都有,默认为false

Mysql连接相关属性
初始化mysql前后端连接所涉及到的一些属性:
packetHeaderSize : 指定Mysql协议中的报文头长度。默认4。
maxPacketSize : 指定Mysql协议可以携带的数据最大长度。默认16M。
idleTimeout : 指定连接的空闲超时时间。某连接在发起空闲检查下,发现距离上次使用超过了空闲时间,那么这个连接会被回收,就是被直接的关闭掉。默认30分钟,单位毫秒。 charset : 连接的初始化字符集。默认为utf8。
txIsolation : 前端连接的初始化事务隔离级别,只在初始化的时候使用,后续会根据客户端传递过来的属性对后端数据库连接进行同步。默认为REPEATED_READ,设置值为数字默认3。

READ_UNCOMMITTED = 1; 
READ_COMMITTED = 2; 
REPEATED_READ = 3; 
SERIALIZABLE = 4; 

sqlExecuteTimeout:SQL执行超时的时间,Mycat会检查连接上最后一次执行SQL的时间,若超过这个时间则会直接关闭这连接。默认时间为300秒,单位秒。

服务相关的属性
bindIp : mycat服务监听的IP地址,默认值为0.0.0.0。
serverPort : 定义mycat的使用端口,默认值为8066
managerPort : 定义mycat的管理端口,默认值为9066。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值