Mycat2 数据分片配置

原创
2022/08/15 15:50
阅读数 50

一、概述

    数据分片,主要是优化大表,将数据按特定规则分散到不同库的同一张表内。除此之外,类似多租户的场景,也可以使用数据分片,将同一个租户的数据放在同一个数据库中,这样可以做到物理数据隔离。

二、配置

    在Mycat2中,配置逻辑架构大致如下:

    注意:在mycat2中,集群和逻辑库没有强配置关系,但集群名称要有规律,这样逻辑库使用时才能按规则使用集群。

    步骤:

        1、准备两个集群,每个集群配置为读写分离(参照《Mycat2 读写分离配置》),集群名称分别为c0和c1

        2、Navicat连接mycat2,执行

-- 建库
CREATE DATABASE db1
-- 切换db1
USE `db1`;
-- 创建分片表
CREATE TABLE db1.`travelrecord` (
  `id` bigint NOT NULL AUTO_INCREMENT,
  `user_id` varchar(100) DEFAULT NULL,
  `traveldate` date DEFAULT NULL,
  `fee` decimal(10,0) DEFAULT NULL,
  `days` int DEFAULT NULL,
  `blob` longblob,
  PRIMARY KEY (`id`),
  KEY `id` (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 dbpartition by mod_hash(id) tbpartition by mod_hash(id) tbpartitions 2 dbpartitions 2;

dbpartition by mod_hash(id) tbpartition by mod_hash(id) tbpartitions 2 dbpartitions 2

以上意思是数据库分片规则是 mod_hash(id),表分片规则是 mod_hash(id),总共分表2个(同一个库2个表,通过后缀区分),分库2个。

    3、增加测试数据

INSERT INTO `db1`.`info` ( `user_id`, `traveldate`, `fee`, `days`, `blob`) VALUES ( '1', '2022-08-11', 1, 1, NULL);
INSERT INTO `db1`.`info` ( `user_id`, `traveldate`, `fee`, `days`, `blob`) VALUES ( '1', '2022-08-11', 1, 1, NULL);
INSERT INTO `db1`.`info` ( `user_id`, `traveldate`, `fee`, `days`, `blob`) VALUES ( '1', '2022-08-11', 1, 1, NULL);
INSERT INTO `db1`.`info` ( `user_id`, `traveldate`, `fee`, `days`, `blob`) VALUES ( '1', '2022-08-11', 1, 1, NULL);
INSERT INTO `db1`.`info` ( `user_id`, `traveldate`, `fee`, `days`, `blob`) VALUES ( '1', '2022-08-11', 1, 1, NULL);
INSERT INTO `db1`.`info` ( `user_id`, `traveldate`, `fee`, `days`, `blob`) VALUES ( '1', '2022-08-11', 1, 1, NULL);
INSERT INTO `db1`.`info` ( `user_id`, `traveldate`, `fee`, `days`, `blob`) VALUES ( '1', '2022-08-11', 1, 1, NULL);
INSERT INTO `db1`.`info` ( `user_id`, `traveldate`, `fee`, `days`, `blob`) VALUES ( '1', '2022-08-11', 1, 1, NULL);
INSERT INTO `db1`.`info` ( `user_id`, `traveldate`, `fee`, `days`, `blob`) VALUES ( '1', '2022-08-11', 1, 1, NULL);
INSERT INTO `db1`.`info` ( `user_id`, `traveldate`, `fee`, `days`, `blob`) VALUES ( '1', '2022-08-11', 1, 1, NULL);
INSERT INTO `db1`.`info` ( `user_id`, `traveldate`, `fee`, `days`, `blob`) VALUES ( '1', '2022-08-11', 1, 1, NULL);
INSERT INTO `db1`.`info` ( `user_id`, `traveldate`, `fee`, `days`, `blob`) VALUES ( '1', '2022-08-11', 1, 1, NULL);

 三、验证

    查询mycat2中表travelrecord的数据

    查看分库情况:

    查看分表情况

    注意以上表id列,mycat2使用雪花算法生成全局唯一自增的序列号,并非使用mysql自带的从0自增的序列号。

有兴趣的大佬大神可以关注下小弟的微信公共号,一起学习交流,扫描以下二维码关注即可。

展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
0 评论
0 收藏
0
分享
返回顶部
顶部