Mycat2 使用教程(二)分库分表
- 前文参考Mycat2 使用教程(一)初始安装
- 本文主要介绍Mycat2的多数据源配置,并实现2库分4表,即每个数据库中2个表)
- 实现mysql的分库分表
- 当数据源只有一个时,在一个数据库服务器中创建2个数据库
- 当数据源有两个时,两个数据库分别创建1个数据
1.新建2个数据库
- 略
- 本文物理数据库创建参考了这篇文章
- 本文创建了如下IP的2个数据库:
192.168.7.128:3306
192.168.7.106:3306
192.168.7.106:8066
2. 为mycat2添加数据源
- 本文的目的是实现2库4表,下方创建了3个数据源以便集群(后2个是同一个库)
- 如果还有更多数据源,可以创建更多
/*+ mycat:createDataSource{
"name":"dr_128",
"url":"jdbc:mysql://192.168.7.128:3306/mysql",
"user":"root",
"password":"YOUR_PASSWORD"
} */;
/*+ mycat:createDataSource{
"name":"dw106",
"url":"jdbc:mysql://192.168.7.106:3306/mysql",
"user":"root",
"password":"YOUR_PASSWORD"
} */;
/*+ mycat:createDataSource{
"name":"dr106",
"url":"jdbc:mysql://192.168.7.106:3306/mysql",
"user":"root",
"password":"YOUR_PASSWORD"
} */;
- 语句执行如下图示例:

3. 添加集群配置
/*! mycat:createCluster{"name":"c0","masters":["dr_128"],"replicas":[]} */;
/*! mycat:createCluster{"name":"c1","masters":["dr106"],"replicas":[]} */;
4. 创建数据库
# 这里创建了一个叫ryhh的表
CREATE DATABASE ryhh CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;
6.创建全局表
- 即在所有节点创建一个sys_user表
- 注意:这一步可以跳过,不是本文将的分库分表的内容,分库分表见第7节
DROP TABLE `sys_user`;
CREATE TABLE `sys_user` (
`id` bigint(0) NOT NULL AUTO_INCREMENT COMMENT 'id',
`username` varchar(32) NULL COMMENT '用户名',
`password` varchar(32) NULL COMMENT '密码',
PRIMARY KEY (`id`),
KEY `id` (`id`) # 注意这个KEY
) ENGINE=InnoDB DEFAULT CHARSET=utf8 BROADCAST;
7.创建分片表
DROP TABLE `sys_user`;
CREATE TABLE `sys_user` (
`id` bigint(0) NOT NULL AUTO_INCREMENT COMMENT 'id',
`username` varchar(32) NULL COMMENT '用户名',
`password` varchar(32) NULL COMMENT '密码',
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'即分库分别语法,请自行理解。
- 分库分表创建表语句执行前:

- 分库分表创建表语句执行后:

- 如图,创建自动分库分表成功
8.验证
- 上述分库分表的算法是根据key的hash值取余决定数据放哪个表
- 这里验证时,放id为1,2,3,4,5的5条数据
- 此时,2个库的4个表中,应有1个表中有2条数据,其他3个表中有1条数据
- 在mycat2连接中执行如下5个SQL
INSERT INTO `sys_user` (id,username,password) VALUES (1,'user1','123456');
INSERT INTO `sys_user` (id,username,password) VALUES (2,'user2','123456');
INSERT INTO `sys_user` (id,username,password) VALUES (3,'user3','123456');
INSERT INTO `sys_user` (id,username,password) VALUES (4,'user4','123456');
INSERT INTO `sys_user` (id,username,password) VALUES (5,'user5','123456');
9.常见问题
- 暂无。
- 如果遇到其他问题,可以在下方留言。
- 具有代表性的问题,我会提到正文中来。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?