MyCat 读写分离学习日记

废话篇:

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 目录中的配置有何作用?

这些问题留给以后再解决吧,现在暂时先手动配,用笨的办法解决有和无的问题。或者大家若是有什么办法,可以在评论区补充交流。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值