专注Java教育14年 全国咨询/投诉热线:444-1124-454
星辉LOGO图
始于2009,口口相传的Java黄埔军校
首页 hot资讯 连接Mycat数据库的demo

连接Mycat数据库的demo

更新时间:2021-07-07 16:54:40 来源:星辉 浏览1757次

怎么通过mycat实现分库分表的功能:

准备数据库:

  • 第一台mysql(130)上创建两个数据库,分表叫做db1、db2,然后再分别在db1、db2上创建一张相同的表
  • 在第二台mysql(131)上创建数据库名字叫做db3,然后再创建一张与db1、db2上相同的表
CREATE DATABASE db1 DEFAULT CHARACTER SET utf8;
CREATE DATABASE db2 DEFAULT CHARACTER SET utf8;
use db1;
CREATE TABLE product(
	id INT PRIMARY KEY,
	pname CHAR(20)
);
use db2;
CREATE TABLE product(
	id INT PRIMARY KEY,
	pname CHAR(20)
);
-------------------131-----------------
CREATE DATABASE db3 DEFAULT CHARACTER SET utf8;
use db3;
CREATE TABLE product(
	id INT PRIMARY KEY,
	pname CHAR(20)
);

 如果想要修改mycat登录的账号密码,可以到conf/server.xml去修改

连接mycat

连接mycat

重新启动的命令,切换到bin下执行./mycat restart测试新的账号密码

修改mycat的conf/schema.xml文件,配置数据库的url、账号、密码

连接mycat

配置数据参数

连接mycat

连接数据库的过程:根据

中dataNode,得到节点的名字,例如dn1,然后再用dn1到所有的配置找是否有名字相同的,如果有则读取到dataHost中指定的数据库的配置,然后根据中配置url、用户名、密码连接到指定的数据库,具体用哪个数据主要使用根据中的database决定,现在db1

重启mycat

cd到bin执行./mycat restart

通过Navicat操作mycat,双击mycat连接mycat,然后双击TESTDB选择数据库,如果双击TESTDB一直转圈,那就是schema.xml文件配置有问题,检查一下配置执行./mycat restart

连接mycat

在product虚拟表中创建查询,执行插入数据的操作,此处有坑:通过mycat插入数据时,必须将所有的字段名写出来,如果不写执行失败

结果如下:

insert into product(id,pname)values(1,‘电脑’);db1

insert into product(id,pname)values(5000000,‘手机’);db1

insert into product(id,pname)values(5000001,‘空调’);db2

insert into product(id,pname)values(10000000,‘铁锅’);db2

insert into product(id,pname)values(10000001,‘笔记本’);db3

结论:

目前根据默认配置来说,切片的规则是根据id的范围进行切分,id范围[1,500W]存在db1的product表中,[5000001,1000W]存在db2的product表中,[10000001,1500W]存在db3的product中…

mycat中的一些分片规则(水平拆分表的规则)•在schema.xml中指定了当前默认的分片规则

连接mycat

在conf/rule.xml文件中定义一些mycat支持的规则,在里面可以看到分片的详细规则

连接mycat

连接mycat

在conf/autopartition-long.txt里面设置了默认的分片细则

连接mycat

这里可以修改一下单位,把M修改成K

然后重启mycat、将之前的数据删除进行测试

insert into product(id,pname)values(1,‘电脑’);db1

insert into product(id,pname)values(500000,‘手机’);db1

insert into product(id,pname)values(500001,‘空调’);db2

insert into product(id,pname)values(1000000,‘铁锅’);db2

insert into product(id,pname)values(1000001,‘笔记本’);db3

结论:

通过mycat中的product虚拟表进行查询操作

利用mycat查询数据的流程:将sql发送到了mycat,mycat会根据schema.xml中配置将sql语句转发给db1、db2、db3,然后这个三个数据库分别执行查询然后将查询出来的结果返回给mycat,然后mycat在对得到结果集进行整合,然后将最终的结果集返回给客户端。

分片规则:

•默认的是根据id的范围进行分片auto-sharding-long

•根据hash分片sharding-by-intfile

前提:一个字符串、对象它的哈希值是固定的

根据某个字段(id)的哈希值进行水平切分,例如下图中订单表存在大量的订单,

连接mycat

根据用户id的哈希值进行切分之后,可以保证同一个用户的订单在同一张表中。形成多张较小的表。

但是这样也会存在一个问题:各个表中的数据不均匀,表也太多了,主要用于切分之后表不多的情况下使用

•取模分片mod-long

不同的对象他们的哈希值可能相同,就算哈希值不同对1024取余之后得到的余数也可能相同,可以保证同一个用户id的数据在同一个数据库中,同时余数相同的数据也都在同一个数据库中,为了达到数据库的负载均衡

连接mycat

以上就是星辉小编介绍的"连接Mycat数据库的demo",希望对大家有帮助,想了解更多可查看Mycat教程,如有疑问,请在线咨询,有专业老师随时为您服务。

提交申请后,顾问老师会电话与您沟通安排学习

免费课程推荐 >>
技术文档推荐 >>