一.Mycat分表
配置
导入mycat源码:如下
mycat有三个重要的配置文件
1.server.xml<?xml version="1.0" encoding="UTF-8"?>
utf8
0
01
1
0
0
300
0
(?:(s*nexts+values+fors*MYCATSEQ_(w+))(,|)|s)*)+
false
io.mycat.route.sequence.handler.HttpIncrSequenceHandler
0
0
0
64k
1k
0
384m
false
false
0
userTESTDBtrueTESTDB -->
123456
enjoyDB
2.schema.xml(逻辑库配置)<?xml version="1.0"?>
writeType="0" dbType="mysql" dbDriver="jdbc" switchType="1" slaveThreshold="100">
select user()
host="hostM1" url="jdbc:mysql://192.168.64.131:3307"
user="root" password="123456">
schemal标签下的table标签解读(mycat中的逻辑表):name:逻辑表的名称,名称必须唯一
dataNode:值必须跟dataNode标签中的name对应,如果值过多可以用 dataNode="dn$0-99,cn$100-199"
rule:分片规则配置,定义在rule.xml中,必须与tableRule中的name对应
ruleRequired:该属性用于指定表是否绑定分片规则,如果配置为true,但没有配置具体rule的话 ,程序会报错
primaryKey:该逻辑表对应真实表的主键,例如:分片的规则是使用非主键进行分片的,那么在使用主键查询的时候,就会发送查询语句到所有配置的DN上,如果使用该属性配置真实表的主键。难么MyCat会缓存主键与具体DN的信息,那么再次使用非主键进行查询的时候就不会进行广播式的查询,就会直接发送语句给具体的DN,但是尽管配置该属性,如果缓存并没有命中的话,还是会发送语句给具体的DN,来获得数据
type:全局表:global 每一个dn都会保存一份全局表,普通表:不指定该值为globla的所有表 autoIncrement:autoIncrement=“true”,默认是禁用的。
needAddLimit:默认是true
数据节点dataNode下dataHost配置解读:
balance:balance="0", 不开启读写分离机制,所有读操作都发送到当前可用的writeHost上。
balance="1",全部的readHost与stand by writeHost参与select语句的负载均衡,简单的说,当双主双从模式(M1->S1,M2->S2,并且M1与 M2互为主备),正常情况下,M2,S1,S2都参与select语句的负载均衡。
balance="2",所有读操作都随机的在writeHost、readhost上分发。
balance="3",所有读请求随机的分发到writeHost对应的readhost执行,writerHost不负担读压力,注意balance=3只在1.4及其以后版本有,1.3没有。
writeType: 负载均衡类型,目前的取值有3种:writeType="0", 所有写操作发送到配置的第一个writeHost,第一个挂了切到还生存的第二个writeHost,重新启动后已切换后的为准,切换记录在配置文件中:dnindex.properties .
writeType="1",所有写操作都随机的发送到配置的writeHost。
writeType="2",没实现
switchType: -1 表示不自动切换 1 默认值,自动切换 2 基于MySQL主从同步的状态决定是否切换 心跳语句为 show slave status 3 基于MySQL galary cluster的切换机制(适合集群)(1.4.1) 心跳语句为 show status like ‘wsrep%’ 。
dataHost下配置的url为物理机的地址。
3.rule.xml(分片规则的配置文件)
上面配置了简单的mod-long规则,是mycat自带的,即根据schemal.xml里面配置的主键来进行取模操作,落到对应切分的表里,配置里的count3表示分三个表。
order_id
mod-long
3
使用
启动MycatStartup类:mycat数据库中间件即启动成功。
用navicat连接mycat,使用server.xml里面配置的用户
root,123456默认端口8066,插入数据:
查看控制台可看已经路由到order1表中了,即实现了分表操作。