今天我们来简单的介绍下数据库中间件——Mycat,以及它的简单使用
Mycat是数据库中间件,就是介于数据库与应用之间,进行数据处理与交互的中间服务。对数据进行分片处理之后,从原有的一个库,被切分为多个分片数据库,所有的分片数据库集群构成了整个完整的数据库存储。
用户可以把它看做是一个数据库代理,用MySQL客户端工具和命令行访问,其核心功能是分库分表,即将一个大表水平分割为N个小表,存储在后端MySQL服务器里或者其他数据库里。
Mycat有三个重要的配置文件,分别是service.xml,rule.xml,schema.xml
service.xml主要配置mycat服务的参数,比如端口号,myact用户名和密码使用的逻辑数据库等
配置mycat基本信息,包括sql解析器,客户端连接端口号,管理端口号等
配置用户信息,test,user用户名,password密码,schemas逻辑数据库,readOnly是否只读,若为true,则说明该用户不能向数据库中插入,修改,删除数据,只能查询
rule.xml主要配置路由策略,主要有分片的片键,拆分的策略(取模还是按区间划分等)
columns表示对表中的哪一列进行求模,这边配置的是id列;mod-long对应下面的function的name
以上为求模分片规则,对2进行求模,数字可以自行更改
常见的分片规则:
PartitionByFileMap:枚举分片
AutoPartitionByLong:范围分片
PartitionByMod:求模分片
PartitionByDate:日期列分区法
schema.xml文件主要配置数据库的信息,例如逻辑数据库名称,物理上真实的数据源以及表和数据源之间的对应关系和路由策略等。
TESTDB对应第1个步骤中的逻辑数据库的名称,item为物理数据库表的名称,id为表主键,dataNode对应下面的dataNode的name,rule为分片规则,这边配置的是求模分片,如果要多个分片接合,中间用逗号分隔
node_db01为dataNode的名称,dataHost对应dataHost的name,db01,db02,db03为物理数据库
dataHost01为逻辑主机的名称,writeHost配置Mycat连接物理数据库的信息,server1为名称,localhost:3306为数据库连接ip和端口号,本机为localhost,ddl_mgr为登录物理数据库的用户名,hik12345#为登录物理数据库的密码
create database db01;
create database db02;
create database db03;
在db01中创建
CREATE TABLE users (
id INT NOT NULL AUTO_INCREMENT,
name varchar(50) NOT NULL default '',
indate DATETIME NOT NULL default '0000-00-00 00:00:00',
PRIMARY KEY (id)
)AUTO_INCREMENT= 1 ENGINE=InnoDB DEFAULT CHARSET=utf8;
在db02中创建
CREATE TABLE item (
id INT NOT NULL AUTO_INCREMENT,
value INT NOT NULL default 0,
indate DATETIME NOT NULL default '0000-00-00 00:00:00',
PRIMARY KEY (id)
)AUTO_INCREMENT= 1 ENGINE=InnoDB DEFAULT CHARSET=utf8;
在db03中创建
CREATE TABLE item (
id INT NOT NULL AUTO_INCREMENT,
value INT NOT NULL default 0,
indate DATETIME NOT NULL default '0000-00-00 00:00:00',
PRIMARY KEY (id)
)AUTO_INCREMENT= 1 ENGINE=InnoDB DEFAULT CHARSET=utf8;
insert into users(name,indate) values('aa',now());
insert into item(value,indate) values(100,now());
insert into item(value,indate) values(200,now());
insert into item(value,indate) values(300,now());
insert into item(value,indate) values(400,now());
最后查看数据库,可以看到实现了分库分表。