Mycat 分库分表

一个很有意思的例子,关于mycat在分库分表的应用,就是saas系统关于多个租户的实现。

在一般情况下,这种情况我们会将每个租户的数据库分开,通过一个应用的不同备份进行连接,但是这样做有一个问题就是对资源的浪费,以及管理的混乱。

但是假设我们在我们于数据库之间添加一层,当我们要访问某个数据库的时候就可以通过这一层来找到,这就是数据库中间件,mycat

在讨论其他之前,我们先来实际操作一下mycat分库分表

首先,我们有三个数据库,分别为db01,db02,db03

我们分别有两张表分别为:organization(组织表) user(用户表)

这里的用户是分别属于不同的组织的。其中organization 属于 db01 , user 属于db02,db03,具体展示如下图

其创建代码如下:

organization:

CREATE TABLE `organization` (

`id` BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT 'id',

`name` VARCHAR(50) NOT NULL COMMENT '组织名称' COLLATE 'utf8_bin',

PRIMARY KEY (`id`)

)

COMMENT='组织表'

COLLATE='utf8_bin'

ENGINE=InnoDB;

user:

CREATE TABLE `user` (

`id` BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT 'id',

`org_id` BIGINT(20) NOT NULL COMMENT '所属组织id',

`name` VARCHAR(50) NOT NULL COMMENT '名称' COLLATE 'utf8_bin',

PRIMARY KEY (`id`)

)

COMMENT='用户表'

COLLATE='utf8_bin'

ENGINE=InnoDB;

这里我们只讲怎么配置

首先我们需要配置分片规则:rule.xml

代码如下:

id

mod-long

2

上图是设置分片的规则,就是以哪个字段为依据来进行分表

然后我们要设置的是:schema.xml

代码为:

dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">

select user()

配置完成以上连个配置文件,接下来就要重启mycat,命令为:

在重启之后,我们可以去连接我们的mycat

mysql -u root -p 123456 -h 127.0.0.1 -P 8806 -D TESTDB

连接完成之后我们做一个测试:在mycat中执行以下命令

insert into organization(name) values('kk');

insert into organization(name) values('ss');

insert into user(id,org_id,name) values(1,1,'zz');

insert into user(id,org_id,name) values(2,1,'yy');

结果为:

在db01中插入了organization数据,在user中插入了user的数据

至此,分库分表配置完毕,更多内容请关注本公众号

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180829G1CQU800?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

同媒体快讯

扫码关注云+社区

领取腾讯云代金券