废话篇:
MyCat 版本 v1.6,文档地址:http://dl.mycat.org.cn/mycat-definitive-guide.pdf 然后没了。
配置篇:
本篇涉及到几个文件
1、schema.xml
2、rule.xml
3、autopartition-long.txt
4、server.xml
1、schema.xml
<!-- 该配置为:数据节点"dn1"中所有的表,在MyCat中以sys_user名称显示,与dataNode配置中保持一致方便使用 -->
<schema name="sys_user" checkSQLschema="true" dataNode="dn1" />
<!-- <schema name="sys_role" checkSQLschema="true" dataNode="dn2" /> -->
<!-- <schema name="sys_region" checkSQLschema="true" dataNode="dn3" /> -->
<!-- 也可以通过配置<table>标签指定表 -->
<!-- 文档地址:http://dl.mycat.org.cn/mycat-definitive-guide.pdf -->
<!--
<schema name="sys_user" checkSQLschema="true">
<table name="t_user" dataNode="dn1" ... ></table>
</schema>
-->
<!-- 以下配置为:"localhost1"中sys_user库 -->
<dataNode name="dn1" dataHost="localhost1" database="sys_user" />
<!-- <dataNode name="dn2" dataHost="localhost1" database="sys_role" /> -->
<!-- <dataNode name="dn3" dataHost="localhost1" database="sys_region" /> -->
<dataHost name="localhost1" maxCon="1000" minCon="10" balance="3" writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
<!-- 心跳语句 -->
<heartbeat>select user()</heartbeat>
<!-- can have multi write hosts -->
<!-- 写的账号和地址 -->
<writeHost host="hostM1" url="127.0.0.1:3306" user="root" password="123456">
<!-- 读的账号和地址 -->
<readHost host="hostS2" url="127.0.0.1:3307" user="root_read" password="123456" />
</writeHost>
</dataHost>
2、rule.xml
<function name="mod-long" class="io.mycat.route.function.PartitionByMod">
<!-- how many data nodes -->
<!-- 此处数字一般比schema.xml中dataNode的数量小或相等 -->
<property name="count">1</property>
</function>
3、autopartition-long.txt
# range start-end ,data node index
# K=1000,M=10000.
# 若只有一个节点,将后面两个注释掉即可。
0-500M=0
#500M-1000M=1
#1000M-1500M=2
4、server.xml
<!-- 写账号 -->
<user name="root_w"defaultAccount="true">
<property name="password">123456789</property>
<property name="schemas">sys_user</property>
<!-- <property name="schemas">sys_user,sys_role,sys_region</property> -->
</user>
<!-- 读账号 -->
<user name="root_r">
<property name="password">123456789</property>
<property name="schemas">sys_user</property>
<!-- <property name="schemas">sys_user,sys_role,sys_region</property> -->
<property name="readOnly">true</property>
</user>
<!-- 多个账号配置多组 -->
<!-- ... -->
5、最后一步,连接MyCat
使用 Navicat 直连就可以了。127.0.0.1:8066
账号密码为 server.xml 配置的账号密码
问题:
问题1、
服务启动不起来,logs/mycat.log 没有任何输出, 报错找不到日志啦!!!
别急,报错日志可能在 logs/wrapper.log 里
问题2、
Illegal table conf : table [ PAYMENT_INFO ] rule function [ rang-long ] partition size : 3 > table datanode size : 1, please make sure table datanode size = function partition size
这种情况一般是 rule.xml 和 autopartition-long.txt 两个问题件的配置有问题。
rule.xml中 可暂时先按 dataNode 的数量配置相应的 count,如:配置1个dataNode,对应的count也为1
autopartition-long.txt 也一样,先把 500M-1000M=1 和 1000M-1500M=2 注释掉。
其他问题、
有些报错信息是按标签名称一层一层往下找才能发现问题,如上述的问题2:
rule function [ rang-long ] partition size : 3 > table datanode size : 1
找到 rule.xml 中 name 为 rang-long 的节点:
<function name="rang-long" class="io.mycat.route.function.AutoPartitionByLong">
<property name="mapFile">autopartition-long.txt</property>
</function>
其中 mapFile 对应着 autopartition-long.txt 文件,找到并排查问题,一步一步下去总能发现问题所在。
没弄明白的东西:
1、如何用正则动态匹配如"sys_"开头的所有库?
schema.xml 中:
dataNode 标签的 database 属性可以配置为 database="db$0-255",意思是匹配 db0~db255 实体数据库。
但是该怎么匹配 sys_a,sys_b,sys_abc这样的库呢?
schema 标签中的 name 属性又该如何设置呢?
server.xml 中
<property name="schemas">sys_user</property>
又该如何设置呢?
2、如何动态配置账号?
如果每个库都有不同的账号做管理,每个账号都有不同的权限,可否动态配置账号并授权呢?
或者说zk是否可以满足这种要求?
其中的 zkconf 目录中的配置有何作用?
这些问题留给以后再解决吧,现在暂时先手动配,用笨的办法解决有和无的问题。或者大家若是有什么办法,可以在评论区补充交流。