mycat的schema.xml重要配置(逻辑库,逻辑表,数据节点,数据源信息等)

10 篇文章 0 订阅
4 篇文章 0 订阅
schema.xml的作用
  • 配置逻辑库和逻辑表
  • 配置逻辑表的数据节点
  • 配置数据节点的对应的mysql物理服务器的信息(ip、port、user、password)
  • 应用程序用sql通过mycat获取mysql数据,mycat是通过schema配置的逻辑库和逻辑表信息找到对应的mysql节点以及节点中的数据库和数据表,然后连接mysql,让mysql执行sql,得到结果,再转发给应用程序
定义逻辑库-schema标签

mycat会定义逻辑库和物理数据库的对应关系,所以,逻辑库的名字可以自定义,不要求和物理数据库同名

<schema name="project1db1" checkSQLschema="false" sqlMaxLimit="100">	
</schema>

如上定义了一个名为project1db1的逻辑库,
sqlMaxLimit设置默认的查询结果返回100条记录,
checkSQLschema设置是否要检查sql中包含数据库名字,默认false不检查,要求程序员写sql时不要使用库名.表明的写法(select * from project1db1.orders where …,),直接不带库名访问(select from orders),因为会跨数据库服务器访问,操作很麻烦

定义逻辑表-table标签

mycat不会定义逻辑表和物理数据表的对应关系,只是通过逻辑表声明存在的物理数据表,所以要求逻辑表和物理表的要同名

<table name="bill" primaryKey="Fbid" dataNode="db01,db02" rule="bill" >
</table>

如上定义了名字是bill的逻辑表,跟物理表名一致,
primaryKey属性设置主键是Fbid也跟物理表中一致,但是主键和水平切分用的分片键(字段)可能不一致,mycat会缓存这个自定义的主键和分片节点的关系(这样就可以将通过分片键的查询转化成对主键的查询,因为主键查询效率最快)
dataNode属性定义了存在db01、db02两个物理节点上,值来源于标签
rule属性是定义使用的水平切分规则,值来源于rule.xml中配置的某个tableRule标签的name属性值,不是进行水平切分的可以不设置这个属性值

定义逻辑表存储的物理数据库节点-dataNode标签
<dataNode name="db1" dataHost="mysqlcluster1" database="project1">
</dataNode>

如上定义了名字是db1的数据节点,
dataHost属性定义使用的Mysql集群mysqlcluster1,值来源于dataHost标签的name
database 定义使用的(mysqlcluster1集群)物理节点上真实存在的数据库名字

定义节点使用的集群机器信息-dataHost标签
<dataHost name="mysqlcluster1" maxCon="1000" minCon="10" balance="3" writeType="0" dbType="mysql" dbDriver="native" switchType="1" >
	<heartbeat>select user()</heartbeat>
	<writeHost host="192.168.5.10" url="192.168.5.10:3306" user="root" password="123456" >
			<readHost host="192.168.5.11" url="192.168.5.11:3306" user="root" password="123456"  />
			<readHost host="192.168.5.12" url="192.168.5.12:3306" user="root" password="123456"  />
	</writeHost>
</dataHost>

如上定义了mysql集群名称mysqlcluster1,
因为对应用程序来说,MyCat可以当做数据库连接池的作用,所以有maxCon、minCon等属性配置,控制mycat和mysql之间(也就等于用户和mysql之间)连接数大小
maxCon属性定义最大连接数
minCon属性定义默认初始化的最小连接数
balance属性定义读写分离和查询负载均衡的工作方式,

  • balance=0时,不开启读写分离,无负载均衡,适合单机数据库使用
  • balance=1时,集群中所有readHost和备用的writeHost参与查询负载均衡,只有那些正在负责写的主节点不参与
  • balance=2时,集群中所有机器无论负责读写的都参与查询负载均衡,适合写压力不大时writeHost帮readHost分担查询压力
  • balance=3时,适合一主多从,所有readHost参与查询负载均衡,writeHost不负责查询

writeType属性集群中定义写数据的方式

  • writeType=0时(一般默认这个值),写操作只由第一个writeHost负责,其他writeHost做备用机,前面的writeHost挂了才切换成写操作
  • writeType=1时,所有wirteHost都参与写,随机执行,可能出现写错乱

dbType属性定义使用mysql这种数据库
dbDriver属性,值native表示使用原生驱动,jdbc表示使用JDBC驱动
switchType属性定义高可用切换主服务器方式

  • switchType=1表示让mycat实现高可用切换,当第一个writeHost挂了,切换到后面可用的writeHost作为主节点进行写操作
  • switchType=-1时表示集群已经使用其他工具进行高可用切换,mycat不作操作

heartbeat标签定义mysql心跳检测,通过执行一段简单的查询语句,测试mysql是否可以正常工作

writeHost 标签定义主服务器,负责写或者备用写
readHost 标签定义从服务器,负责读,xml结构中处在writeHost标签内

  • host属性定义mysql服务器名称(自定义)
  • url属性定义mysql服务器访问地址
  • user属性定义访问mysq服务器的用户
  • password属性定义访问mysql服务器的密码

完整的文件内容

下面是将mysql的project数据库中的users表依据project_users_rule定义的切分规则,将users表水平切分到mysqlcluster1集群中的3台mysql服务器中存储,每台服务器都有3个数据库project_db1、project_db2、project_db3,一台(192.168.5.10)负责写两台负责读(其中slave=192.168.5.11还作为备用切换的机器),3个db都有t_users表,同一台mysql中的3个db中的t_users表分别存储了一部分用户,合起来就是所有用户集了

<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
	<schema name="project_schema_db" checkSQLschema="false" sqlMaxLimit="100" >	
		<table name="t_users" primaryKey="Fid" dataNode="db1,db2,db3" rule="project_users_rule">
		</table>	
	</schema>
	<dataNode name="db1" dataHost="mysqlcluster1" database="project_db1" />
	<dataNode name="db2" dataHost="mysqlcluster1" database="project_db2" />
		<dataNode name="db2" dataHost="mysqlcluster1" database="project_db3" />

	<dataHost name="mysqlcluster1" maxCon="1000" minCon="10" balance="1" >
		<heartbeat>select user()</heartbeat>
		<writeHost host="192.168.5.10" url="192.168.5.10:3306" user="mycatuser1" password="123456" >
			<readHost host="192.168.5.11" url="192.168.5.11:3306" user="mycatuser1" password="123456" />
			<readHost host="192.168.5.12" url="192.168.5.12:3306" user="mycatuser2" password="123456" />
		</writeHost>
		<writeHost host="192.168.5.11" url="192.168.5.11:3306" user="mycatuser1" password="123456" />
	</dataHost>	
</mycat:schema>
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值