1.简介
mycat是国人开发的一款开源的数据库中间件,他的作用就是伪装成一个真的数据库,然后在它背后,连的是多种类型,集群分布式的真实数据库。
1.1 mycat的几个概念
schema: 逻辑库,与MYSQL中的Database (数据库)对应,一个逻辑库中定义了所包含的Table table: 表,即物理数据库中存储的某一张表,与传统数据库不同,这里的表格需要声明其所存储的逻辑数据节点DataNode,这是这是通过表格的分片规则定义来实现的,table可以定义其所属的“子表(childTable)”,子表的分片依赖于与“父表”的具体分片地址,简单的说,就是属于父表里某一条记录A的子表的所有记录都与A存储在同一个分片上。 分片规则: 是一个字段与函数的捆绑定义,根据这个字段的取值来放回所在存储的分片(DataNode)的序号,每个表格可以定义一个分片规则,分片规则可以灵活扩展,默认提供了基于数字的分片规则,字符串规则等。 dataNode: mycat的逻辑数据节点,是存放table的具体物理节点,也称之为分片节点,通过DataSource来关联后端某个数据库上,一般来说,为了高可用性,每个DataNode都设置两个DataSource,一主一从,当主节点宕机,系统自动切换到从节点。 dataHost: 定义某个物理库的访问地址,用于捆绑到dataNode上。 mycat配置文件都在conf目录下
安装包(1.6.7.1版本): https://pan.baidu.com/s/1E8X15D07AasHgSRuUrTMsw 提取码:1234
2.启动
解压安装完后目录如下: 在bin文件夹下双击startup_nowrap.bat 就可以启动了
或许有人问mycat怎么使用它的客户端,答案很简单mysql怎么使用mycat就怎么使用
在conf/server.xml 目录下可查看用户密码
mysql -uroot -p123456 -P8066 -h127.0.0.1
3.水平切分搭建
在conf/schema.xml 文件夹下配置如下
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
<schema name="test" checkSQLschema="false" sqlMaxLimit="100">
<table name="t_user" dataNode="dn1,dn2" primaryKey="id" rule="mod-long" />
</schema>
<dataNode name="dn1" dataHost="localhost1" database="test" />
<dataNode name="dn2" dataHost="localhost1" database="test01" />
<dataHost name="localhost1" maxCon="1000" minCon="10" balance="1"
writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
<heartbeat>select user()</heartbeat>
<writeHost host="hostM1" url="119.91.238.112:3301" user="root"
password="123456">
</writeHost>
<writeHost host="hostS2" url="119.91.238.109:3302" user="root"
password="123456" />
</dataHost>
</mycat:schema>
conf/server.xml 配置:
<user name="root" defaultAccount="true">
<property name="password">123456</property>
<property name="schemas">test</property>
</user>
<user name="user">
<property name="password">user</property>
<property name="schemas">test</property>
<property name="readOnly">true</property>
</user>
conf/rule.xml配置
4.测试
重启mycat
然后在mycat中执行sql创建表,并自动同步到物理库中,注意是mycat执行建表sql
DROP TABLE IF EXISTS `t_user`;
CREATE TABLE `t_user` (
`id` int(11) NOT NULL,
`name` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT into `t_user` (id, name) VALUES ('3','3');
INSERT into `t_user` (id, name) VALUES ('4','4');
INSERT into `t_user` (id, name) VALUES ('5','5');
INSERT into `t_user` (id, name) VALUES ('6','6');
查询
SELECT COUNT(*) from t_user;
|