Mycat之数据库分片(取模分片)-yellowcong

2018-02-05 10:37:10来源:oschina作者:天佑我儿人点击

分享


取模分片,简单来讲,根据数据库的主键和存储的节点数进行取模操作,然后根据取模的结果,将数据存放到对应的节点中,取模分表,可以将数据均匀的分配到各个库中。实现的步骤:1、创建数据库,2、配置schema.xml文件,3、配置server.xml,4、添加rule.xml。这种方式,导致每一个库里面的数据不连续,导致查询的时候,比较耗费资源,但是如果有一些需要按照数字来计算类型的,可以采用这个。



创建数据库

我创建一个学生表,code是学好,我们的学好例子:2012020891 ,有10位,快超出了范围,所以我们使用bigint。


-- 创建数据库
CREATE DATABASE IF NOT EXISTS local1;
-- 使用local1数据库
use local1;
-- 创建用户表
create table student(code bigint(10) comment '学号',dbname varchar(32) comment '数据库名',username varchar(32) comment '用户名称',age int(3) comment '年龄' );
CREATE DATABASE IF NOT EXISTS local2;
use local2;
create table student(code bigint(10) comment '学号',dbname varchar(32) comment '数据库名',username varchar(32) comment '用户名称',age int(3) comment '年龄' );
CREATE DATABASE IF NOT EXISTS local3;
use local3;
create table student(code bigint(10) comment '学号',dbname varchar(32) comment '数据库名',username varchar(32) comment '用户名称',age int(3) comment '年龄' );

查看建立好的表结构这里写图片描述


配置mycat
1、配置schema.xml
vim ./conf/schema.xml
#添加表
#通过这种$的方法,解决了有很多数据库的情况
#jdbc_node$1-3 ,表示的是jdbc_node、jdbc_node、jdbc_node3

完整配置


<?xml version="1.0"?>









select user()



2、配置server.xml
<?xml version="1.0" encoding="UTF-8"?>



0
0
2

0

0

1

1m

1k
0

384m
true


root
yellowcong


user
yellowcong
true

3、配置rule.xml

通过学生的学号(code)字段,进行分片操作。


vim ./conf/rule.xml
#添加rule ,
#设置通过code 这个字段进行分片


code
rang-mod-student

#添加rang-mod-student的配置
#count 是分片的数量


3
测试插入数据

插入数据的时候,必须指定列名。mycat不支持直接插入不带列明的数据。


#连接mycat
mysql -h 127.0.0.1 -P 8066 -u root -proot
#使用yellowcong 数据库
use yellowcong
#插入数据
insert into student (code,dbname,username,age) values (1,database(),'yellowcong',12);
insert into student (code,dbname,username,age) values (2,database(),'yellowcong',12);
insert into student (code,dbname,username,age) values (3,database(),'yellowcong',12);
insert into student (code,dbname,username,age) values (4,database(),'yellowcong',12);

插入的结果,会根据指定的code,进行与运算,运算结果如下表, 可以看到与的结果和对应,结果发现对应的node节点,开始是从 local1开始的。。。




1
1%3 = 1
local2 2
2%3 = 2
local3 3
3%3 = 0
local1 4
4%3 = 1
local2

实际结果这里写图片描述


问题集合
io.mycat.config.util.ConfigException: java.lang.NullPointerException

这个问题的原因,多半就是节点不存在的情况。简单来讲,就是表的节点配置有问题这里写图片描述


检查节点配置这里写图片描述


error java.net.BindException: 地址已在使用

ip地址占用中,所以需要关闭8066端口的程序,然后再启动mycat服务这里写图片描述


解决办法


#查看端口占用情况
netstat -anop | grep 8066
#杀死占用端口的线程
kill 21396
#重启mycat服务
./bin/mycat restart

这里写图片描述


can’t find table define in schema USER schema:yellowcong

表不存在与schemal,简单来讲,就是俺的sql插入的表对象写错了。这里写图片描述

微信扫一扫

第七城市微信公众平台
code 与运算结果 对应数据库