Mycat2快速搭建分库分表

566 阅读2分钟

本文介绍基于windows系统

1.下载文件

tar包:dl.mycat.org.cn/2.0/install…

jar包: dl.mycat.org.cn/2.0/

选择一个自己喜欢的版本,将jar包放入解压的tar包lib文件夹

2. mysql创建用户,权限配置

2.1 创建用户 ,用户名为mycat,密码为123456,赋权限

CREATE USER 'mycat'@'%' IDENTIFIED BY '123456';
--必須要複的權限 mysql8才有的
GRANT XA_RECOVER_ADMIN ON *.* TO 'root'@'%';
---视情况赋值权限
GRANT ALL PRIVILEGES ON *.* TO 'mycat'@'%' ;
flush privileges;

2.2 配置文件修改

prototypeDs.datasource.json

{
	"dbType":"mysql",
	"idleTimeout":60000,
	"initSqls":[],
	"initSqlsGetConnection":true,
	"instanceType":"READ_WRITE",
	"maxCon":1000,
	"maxConnectTimeout":3000,
	"maxRetryCount":5,
	"minCon":1,
	"name":"prototypeDs",
	"password":"123456",//密码
	"type":"JDBC",
  //链接
	"url":"jdbc:mysql://localhost:3306/mysql?useUnicode=true&serverTimezone=Asia/Shanghai&characterEncoding=UTF-8",
	"user":"mycat", //用户名
	"weight":0
}

3.启动mycat

cd mycat/bin
 
#PowerShell
 
./mycat install
./mycat start
./mycat status
 
 
#CMD
 
mycat install
mycat start
mycat status

亦可安装后在服务里启动

4.建表

通过工具链接到mycat 默认端口8066

4.1 创建单表

CREATE TABLE test.`single` (
  `id` bigint NOT NULL AUTO_INCREMENT,
  `user_id` varchar(100) DEFAULT NULL,
  `travel_date` 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;

4.2 创建全局表

CREATE TABLE test.`migrations` (
  `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 BROADCAST;

建全局表语句执行操作

1.更改mycat的整个库配置

2.根据存储节点信息建立物理库,物理表

4.3 创建分片表(分库分表)

CREATE TABLE test.`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;就是分库分表语法

建分片表语句执行操作

1.更改mycat的整个库配置

2.根据当前集群名字prototype集群纳入到分片表的存储节点中

3.根据存储节点信息建立物理库,物理表

默认分片表的自增序列是雪花算法

发现表已经建成如下图:

4.4 插入数据

insert into travelrecord values(1,1,now(),1,1,1);
insert into travelrecord values(2,2,now(),2,2,2);
insert into travelrecord values(3,3,now(),3,3,3);
insert into travelrecord values(4,4,now(),4,4,4);
insert into travelrecord values(5,5,now(),5,5,5);

发现数据已经按规则分到表了, 规则是mod_hash(id) 也就是1%4=1落入1表, 依此类推

5.powershell乱码

中文乱码在链接mysql时增加--default-character-set=utf8

至此简单的mycat使用结束