二撩小姐姐MYCAT
Posted 海鲨数据库架构师
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二撩小姐姐MYCAT相关的知识,希望对你有一定的参考价值。
这次撩她的分身术!
看我的SCHEMA
<?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">
<!-- 逻辑表配置 -->
<table name="studet" dataNode="dn1,dn2" rule="auto-sharding-long"/>
<table name="class" primaryKey="id" type="global" dataNode="dn1,dn2" />
</schema>
<!-- 分片配置 -->
<dataNode name="dn1" dataHost="zabbix" database="mycat" />
<dataNode name="dn2" dataHost="dev" database="mycat" />
<!-- 物理数据库配置 -->
<dataHost name="zabbix" maxCon="1000" minCon="10" balance="0"
writeType="0" dbType="mysql" dbDriver="native" switchType="-1" slaveThreshold="100">
<heartbeat>select user();</heartbeat>
<writeHost host="zabbix8" url="10.0.8.6:3306" user="root" password="123456">
</writeHost>
</dataHost>
<dataHost name="dev" maxCon="1000" minCon="10" balance="0"
writeType="0" dbType="mysql" dbDriver="native" switchType="-1" slaveThreshold="100">
<heartbeat>select user();</heartbeat>
<writeHost host="dev75" url="10.0.7.5:3306" user="root" password="123456">
</writeHost>
</dataHost>
</mycat:schema>
设置默认表存放节点DN1, 设置表STUDET 存放在两个表,分片规则是auto-sharding-log。另外设置了个全局表 class。
这里遇到小姐姐发脾气,说什么 datanode不能小写 必须符合JAVA范。还无理取闹地抛异常 而且是NULL异常。
Caused by: java.lang.NullPointerException
io.mycat.config.loader.xml.XMLSchemaLoader.getDbType(XMLSchemaLoader.java:462)
io.mycat.config.loader.xml.XMLSchemaLoader.loadTables(XMLSchemaLoader.java:384)
io.mycat.config.loader.xml.XMLSchemaLoader.loadSchemas(XMLSchemaLoader.java:168)
io.mycat.config.loader.xml.XMLSchemaLoader.load(XMLSchemaLoader.java:117)
这要懂女人的JAVA思维模式 load -> loadSchemas->loadTables->getDbType 发脾气原因链。检查了下物理配置MYSQL节点是没有错的呀! 哎女人就是这样子,让你猜!最后发现在这里
<table name="studet" dataNode="dn1,dne2" 多打个字符。我比较讨厌JAVA。XML配置。因为双引号里的字符输错了,很难发现,报错提示也不精确。
还是喜欢传统的女人!
搞定了后再上。。。。
Caused by: io.mycat.config.util.ConfigException: Illegal table conf : table [ STUDET ] rule function [ rang-long ] partition size : 3 > table datanode size : 2, please make sure table datanode size = function partition size
默认的分片是分为3片,而我就设置了2个库。然后我又填了个新库,可以正常启动。 如果要修改分片规则,则需要修改rule.xml和其中对应的规则文件。
意思说着这个分片规则需要3个逻辑节点! 你妹啊
看看rule.xml配置情况
。。。。
<tableRule name="auto-sharding-long">
<rule>
<columns>id</columns>
<algorithm>rang-long</algorithm>
</rule>
</tableRule>
。。。。
rule.xml 前部分都是这样的分片规则,规则名,分片字段,分片算法
name 属性指定唯一的名字,用于标识不同的表规则。内嵌的 rule 标签则指定对物理表中的哪一列进行拆分和使用什么路由算法。
columns 内指定要拆分的列名字。
algorithm 使用 function 标签中的 name 属性。连接表规则和具体路由算法。当然,多个表规则可以连接到
同一个路由算法上。 table 标签内使用。让逻辑表使用这个规则进行分片
<funcrang-longtion name="rang-long"
class="io.mycat.route.function.AutoPartitionByLong">
<property name="mapFile">autopartition-long.txt</property>
</function>
name 指定算法的名字。
class 制定路由算法具体的类名字。
property 为具体算法需要用到的一些属性。
修改分片规则,这样高深的事情,要等与小姐姐感情深了再说,现在再添加个物理节点。
三个库,其中两个库建了表,第3个没有建表。
[SQL]INSERT INTO studet (NAME) VALUES('Shark');
[Err] 1064 - bad insert sql (sharding column:ID not provided,INSERT INTO studet (NAME)
VALUES ('Shark')
需要添加ID进去
[SQL]INSERT INTO studet (id,NAME) VALUES(1,'Shark');
受影响的行: 1
时间: 0.023s
发现插入到了ZABBIX物理机上,然后连续插了4笔,都插在这台物理机上了。什么情况啊? 查看下分片规则如下
[root@DBA_ZABBIX conf]# cat autopartition-long.txt
# range start-end ,data node index
# K=1000,M=10000.
0-500M=0
500M-1000M=1
1000M-1500M=2[root@DBA_ZABBIX conf]#
0-500万 放到第一个分片节点上。
丢没想到小姐姐的这脾气!
换个分片规则,看看MOD-LOG
<tableRule name="mod-long">
<rule>
<columns>id</columns>
<algorithm>mod-long</algorithm>
</rule>
</tableRule>
<function name="mod-long" class="io.mycat.route.function.PartitionByMod">
<!-- how many data nodes -->
<property name="count">3</property>
</function>
<table name="studet" dataNode="dn1,dn2,dn3" rule="mod-long"/>
[SQL]INSERT INTO studet (id,NAME) VALUES(5,'ZabbixBigx');
[Err] 1146 - Table 'mycat.studet' doesn't exist
啥意思呢? 哦 第三个库没有建该表,那就建一个表!然后5就插入成功了。
先把第一个库的1-4个学生清空,然后再插入
INSERT INTO studet (id,NAME) VALUES
(1,'Shark'),
(2,'Dog'),
(3,'Big'),
(4,'Bigx');
分别看插到哪些库:
同学3被放到了ZABBIX节点上
同学1和4被放到Dev节点上
同学2和5放在GanDai节点上
然后在MYCAT前端工具
select * from mycat.studet
返回的数据是按照 各个分片节点 结果集拼接回来的。
总结下:对要分片的表,需要了解合适的分片算法,以及该算法分片字段,还有了解分片算法需要起步的节点数,每个节点都要建好对应的表,最后了解分片算法的值拆分范围。
以上是关于二撩小姐姐MYCAT的主要内容,如果未能解决你的问题,请参考以下文章
MycatMycat核心开发者带你看尽Mycat三大核心配置文件!!
请问谁有姐姐们的slam dunk e08的网盘资源可以共享。谢谢。
如何用MATLAB为小姐姐跳舞视频增添另一个小姐姐跳舞进度条