系统开发中,数据库是非常重要的一个点。除了程序的本身的优化,如:SQL语句优化、代码优化,数据库的处理本身优化也是非常重要的。主从、热备、分表分库等都是系统发展迟早会遇到的技术问题问题。Mycat是一个广受好评的数据库中间件,已经在很多产品上进行使用了。希望通过这篇文章的介绍,能学会Mycat的使用。
1.Mycat下载安装
Mycat解压后的目录结构如下:
目录
说明
2.Mycat架构
Mycat的架构其实很好理解,Mycat是代理,Mycat后面就是物理数据库。和Web服务器的Nginx类似。对于使用者来说,访问的都是Mycat,不会接触到后端的数据库。
简单分表的示例如下:
服务器
IP
说明
Mycat作为主数据库中间件,肯定是与代码弱关联的,所以代码是不用修改的,使用Mycat后,数据库连接是不变的,默认端口是8066。连接方式和普通数据库一样,如:jdbc:mysql://192.168.0.2:8066/
3.Mycat具体配置如下:
server.xml
32
32
0.0.0.0
4096
300000
100
druidparser
1
8066
9066
test
TESTDB
user
TESTDB
true
参数
说明
rule.xml
参数
说明
schema:
属性
说明
table:
属性
说明
dataNode:
属性
说明
dataHost:
属性
说明
4.登录mycat
mysql -utest -ptest -h127.0.0.1 -P8066 -DTESTDB
测试数据库:
DROP DATABASE IF EXISTS db01;
CREATE DATABASE db01;
USE db01;
CREATE TABLE users (
id INT NOT NULL AUTO_INCREMENT,
name VARCHAR(50) NOT NULL DEFAULT '',
addtime DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (id)
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
############################################################
DROP DATABASE IF EXISTS db02;
CREATE DATABASE db02;
USE db02;
CREATE TABLE item (
id INT NOT NULL AUTO_INCREMENT,
value INT NOT NULL default 0,
addtime DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (id)
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
############################################################
DROP DATABASE IF EXISTS db03;
CREATE DATABASE db03;
USE db03;
CREATE TABLE item (
id INT NOT NULL AUTO_INCREMENT,
value INT NOT NULL default 0,
addtime DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (id)
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
现在通过数据库查询数据库和表,发现只有逻辑数据库TESTDB而不是db01, db02, db03;而且表也是统一显示的,而不是分布在不同的实际数据库中。参考图片如下:
现在在访问Mycat在数据库中插入数据,看数据能否按照前面配置的路由规则进行分表
测试SQL:
insert into users(name,addtime) values('zhangsan',now());
insert into users(name,addtime) values('lisi',now());
insert into item(id,value,addtime) values(1,100,now());
insert into item(id,value,addtime) values(2,100,now());
然后在Mycat上查看是否插入成功,下图显示插入成功
在Mycat上查询数据:
然后登录实际的数据库(MySQL端口号3306),看分表是否成功。下图显示分表成功
至此Mycat安装和测试分表分库结束。功能测试正常。
领取专属 10元无门槛券
私享最新 技术干货