一、前言
本文将基于主从复制,读写分离的环境基础上进行一个简单的分片(分库分表)配置
二、Mycat分片配置
mycat分片主要在scheam.xml,rule.xml这2个表中配置
① scheam.xml:配置逻辑表以及对应使用的分片规则
select user()
这里小编主要对t_user表进行分片,使用的分片规则为auto-sharding-long(每个库下的表中保存500万条数据),也就是说:分了3个库(db1,db2,db3),这3个库下的t_user表分别保存500万条数据
db1 : 1~5000000
db2 : 5000001~10000000
db3 : 10000001~15000000
详细的分片规则主要在rule.xml中定义,然后取tableRule标签中的name属性值即可 比如上面使用到的auto-sharding-long:
id
rang-long
autopartition-long.txt
如果对多个表进行分片配置则配置多个table,指定相应的dataNode,rule等信息即可
② rule.xml :定义分片规则
在这里我们可以自定义分片规则,然后在schema.xml中使用
tableRule
name : 对应schema.xml配置文件中table标签对应的rule属性,即逻辑表的分片规则
columns : 指定拆分的列字段
algorithm : 定义分片规则即具体的分片算法,对应function标签的name属性值
function
name : 分片算法名
class : 分片算法对应的具体的类
property : 算法具体需要的一些属性,不同的算法对应的配置不同
下面贴出mycat默认的一些分片规则,实际应用中可根据自已的需求来自定义!
id
func1
user_id
func1
sharding_id
hash-int
id
rang-long
id
mod-long
id
murmur
id
crc32slot
create_time
partbymonth
calldate
latestMonth
id
rang-mod
id
jump-consistent-hash
0
2
160
2
partition-hash-int.txt
autopartition-long.txt
3
8
128
24
yyyy-MM-dd
2015-01-01
partition-range-mod.txt
3
③ 重启mycat服务
三、创建表插入数据测试分片
这里注意要先在mysql主库上新建我们上面scheam.xml配置文件中配置的db1,db2,db3这3个库再连接mycat服务哦,不然连接mycat的时候会出现如下的问题
1、Navicat连接Mycat创建表t_user
温馨小提示:如果之前mycat中已经有了t_user表,即之前的操作中我们的mysql下已经存在一个db1库下的t_user表,但db2以及db3库下却没有的话,需要我们自己手动在db2,db3库下创建与db1库下t_user表相同的表结构,这里小编为了方便是直接将之前存在的t_user表删除后重新创建一个新的,但实际情况中建议不要这样操作哦,毕竟表里面是存在数据的,数据就是财富,如果吗,没有数据的话就随便怎么搞!
创建完成效果为主从数据库下的db1,db2,db3库下都会出现t_user表
2、插入数据
温馨小提示:在mycat中操作数据,mysql中刷新以查看效果哦~
① 插入id为1~5000000的数据
效果如下,只有db1库下存在数据,db2,db3库下均无数据
② 插入id为5000001~10000000的数据
效果如下,只有db2库下存在数据,db1,db3库下均无数据
③ 插入id为10000001~15000000的数据
效果如下,只有db3库下存在数据,db1,db2库下均无数据
最后我们一个简单的mycat分片配置就成功完成了~