一个很有意思的例子,关于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的数据
至此,分库分表配置完毕,更多内容请关注本公众号
领取专属 10元无门槛券
私享最新 技术干货