mycat2 分库分表

mycat2读写分离
mysql主从复制

mycat2 分库分表 实在 配置mycat2 读写分离 及主从复制的基础上完成的

以下所有操作 在mycat 登录后执行

一、配置分库分表数据源

name:数据名称 一般以以最后一个字母判断 r 是读 w是写
url: 真实数据源ip地址 理论上是每一个ip都不相同的 我这儿是为了测试 做成的相同
user:数据库账号
password:数据库密码

#第一个写库
/*+ mycat:createDatasource{"name":"dw0","url":"jdbc:mysql://192.168.245.132:3306","user":"root","password":"Root_123"} */
#第二个读库
/*+ mycat:createDatasource{"name":"dr0","url":"jdbc:mysql://192.168.245.132:3306","user":"root","password":"Root_123"} */
#第二个写库
/*+ mycat:createDatasource{"name":"dw1","url":"jdbc:mysql://192.168.245.136:3306","user":"root","password":"Root_123"} */
#第二个读库
/*+ mycat:createDatasource{"name":"dr1","url":"jdbc:mysql://192.168.245.136:3306","user":"root","password":"Root_123"} */
显示所有数据源
/*+ mycat:showDataSources{} */; 

二、配置分库分表集群

name: 建议以c开头
masters: 主机数据源名称
replicas: 从机数据源名称

#配置第一组集群
/*! mycat:createCluster{"name": "c0", "masters": ["dw0"], "replicas": ["dr0"]}*/;
#配置第二组集群
/*! mycat:createCluster{"name": "c1", "masters": ["dw1"], "replicas": ["dr1"]}*/;
# 显示所有集群
/*+ mycat:showClusters{} */; 

创建、使用数据库

CREATE DATABASE mycat_test;

use mycat_test;

分库分页方法

一、分片表配置

CREATE TABLE orders(
    id BIGINT NOT NULL,
    order_type INT,
    customer_id INT,
    amount DECIMAL(10, 2),
    PRIMARY KEY(id)
) ENGINE = INNODB DEFAULT CHARSET = utf8
dbpartition BY mod_hash(id )tbpartition BY mod_hash( id )tbpartitions 1 dbpartitions 2;

dbpartition BY mod_hash(id) 这部分是在说数据库级别的分区。“dbpartition”
意思是对数据库进行分区。“mod_hash (id)” 是分区的方式,它会根据 “id” 这个字段的值来做分区。
“mod_hash” 是一种哈希算法,叫取模哈希。就好像有一个公式,把 “id” 的值放进去算一下,得到一个结果。根据这个结果把数据分散存到不同的数据库分区里,这样做可以让数据分布得更均匀,就像把很多东西分别放在不同的盒子里,而不是都堆在一个盒子里,方便以后查找和管理。
tbpartition BY mod_hash(id) 这是关于表级别的分区。“tbpartition” 表示对表进行分区。同样是用
“id” 字段,通过 “mod_hash”
这种算法来分区。这就好比在每个盒子(数据库分区)里,再把东西用小隔板(表分区)分开,也是为了让数据分布得更合理,让查询数据的时候能更快地定位到需要的数据在哪里。
tbpartitions 1 dbpartitions 2 “tbpartitions 1” 是说表分区的数量是 1个。修改这个值来增加表分区数量。
“dbpartitions 2”表示数据库分区的数量是 2 个,就是说数据会被分成两部分存到两个不同的数据库分区里面。

插入数据

INSERT INTO orders(id,order_type,customer_id,amount) VALUES(1,101,100,100100.00);
INSERT INTO orders(id,order_type,customer_id,amount) VALUES(2,101,100,100300.00);
INSERT INTO orders(id,order_type,customer_id,amount) VALUES(3,101,101,120000.00);
INSERT INTO orders(id,order_type,customer_id,amount) VALUES(4,101,101,103000.00);
INSERT INTO orders(id,order_type,customer_id,amount) VALUES(5,102,101,100400.00);
INSERT INTO orders(id,order_type,customer_id,amount) VALUES(6,102,100,100020.00);

在这里插入图片描述

主机会多出一个mycat_test_0表 从机会多出mycat_test_1表
mycat_test_0表 内容

在这里插入图片描述

mycat_test_1表 内容

在这里插入图片描述

通过Mycat 查询 得出完整数据

在这里插入图片描述

二、全局表(广播表)通过 BROADCAST创建

CREATE TABLE orders(
    id BIGINT NOT NULL,
    order_type INT,
    customer_id INT,
    amount DECIMAL(10, 2),
    PRIMARY KEY(id)
) ENGINE = INNODB DEFAULT CHARSET = utf8 BROADCAST
插入数据
INSERT INTO broadcast_test (id,name)  VALUES (1,'a');
INSERT INTO broadcast_test (id,name)  VALUES (2,'b');
INSERT INTO broadcast_test (id,name)  VALUES (3,'c');
INSERT INTO broadcast_test (id,name)  VALUES (4,'d');
会发现两张表的内容相同

在这里插入图片描述

关联表(ER表)分片规则一样mod_hash

关联表也成为绑定表或者ER表。表示数据逻辑上有关联性的两个或多个表,例如订单和订单详情表。对于关联表,通常希望他们能够有相同的分片规则,这样在进 行关联查询时,能够快速定位到同一个数据分片中。

的order表基础上创建order_detail表 分片规则一样 mycat2 分片规则

CREATE TABLE orders_detail(
    `id` BIGINT NOT NULL,
		detail VARCHAR(2000),
		order_id INT,
		PRIMARY KEY (id)
) ENGINE = INNODB DEFAULT CHARSET = utf8
dbpartition BY mod_hash(order_id )tbpartition BY mod_hash( order_id )tbpartitions 1;

查看er表

/*+ mycat:showERGroup{} */

插入数据

INSERT INTO mycat_test.orders_detail(id,detail,order_id) VALUES(1,'detail1',1);
INSERT INTO mycat_test.orders_detail(id,detail,order_id) VALUES(2,'detail1',2);
INSERT INTO mycat_test.orders_detail(id,detail,order_id) VALUES(3,'detail1',3);
INSERT INTO mycat_test.orders_detail(id,detail,order_id) VALUES(4,'detail1',4);
INSERT INTO mycat_test.orders_detail(id,detail,order_id) VALUES(5,'detail1',5);
INSERT INTO mycat_test.orders_detail(id,detail,order_id) VALUES(6,'detail1',6);

查询数据

SELECT * FROM orders o INNER JOIN orders_detail od on o.id = od.order_id;

结果
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值