Mycat2 使用教程(二)分库分表、mysql分库分表

Mycat2 使用教程(二)分库分表

  • 前文参考Mycat2 使用教程(一)初始安装
  • 本文主要介绍Mycat2的多数据源配置,并实现2库分4表,即每个数据库中2个表)
  • 实现mysql的分库分表
  • 当数据源只有一个时,在一个数据库服务器中创建2个数据库
  • 当数据源有两个时,两个数据库分别创建1个数据

1.新建2个数据库

  • 本文物理数据库创建参考了这篇文章
  • 本文创建了如下IP的2个数据库:
# 物理机数据库2个,都是8.0.18版本
192.168.7.128:3306	#原生安装
192.168.7.106:3306  #docker安装
# mycat 代理1个
192.168.7.106:8066

2. 为mycat2添加数据源

  • 本文的目的是实现2库4表,下方创建了3个数据源以便集群(后2个是同一个库)
  • 如果还有更多数据源,可以创建更多
# 使用navicat连接上mycat2,执行下方语句
# 请正确填写信息,其中name是可以自定义的
# 建议在新建查询中执行,如下方图
# 注意:下方不是注释,是可以执行的语句
/*+ 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. 添加集群配置

# name、replicas、masters等请正确填写
# replicas 写法与master一样,写一个或多个数据源,需是master数据源对应的从备份库(便于查询),没有请如下留空
/*! 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.常见问题

  • 暂无。
  • 如果遇到其他问题,可以在下方留言。
  • 具有代表性的问题,我会提到正文中来。
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值