mycat连接数据库demo

本文详细介绍了如何通过mycat实现分库分表功能,包括mycat的配置步骤,如修改server.xml和schema.xml文件,以及数据库连接和分片规则。通过Navicat操作mycat进行数据插入时,需指定所有字段名。mycat的分片规则基于id范围进行,默认配置为auto-sharding-long。此外,还讨论了hash和取模分片策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

怎么通过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去修改

在这里插入图片描述
在这里插入图片描述

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

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

在这里插入图片描述

配置数据参数

在这里插入图片描述
连接数据库的过程:根据

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

重启mycat

cd到bin 执行./mycat restart

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

在这里插入图片描述

在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中指定了当前默认的分片规则

在这里插入图片描述

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

在这里插入图片描述

在这里插入图片描述

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

在这里插入图片描述
这里可以修改一下单位,把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)的哈希值进行水平切分,例如下图中订单表存在大量的订单,
在这里插入图片描述

根据用户id的哈希值进行切分之后,可以保证同一个用户的订单在同一张表中。形成多张较小的表。
但是这样也会存在一个问题:各个表中的数据不均匀,表也太多了,主要用于切分之后表不多的情况下使用

•取模分片 mod-long
不同的对象他们的哈希值可能相同,就算哈希值不同对1024取余之后得到的余数也可能相同,可以保证同一个用户id的数据在同一个数据库中,同时余数相同的数据也都在同一个数据库中,为了达到数据库的负载均衡
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值