mycat小试牛刀入门

今日心血来潮搞了以下mycat这个分布式中间件,主要参考
https://blog.csdn.net/u013467442/article/details/56955846
建两个数据表:
users不分片,全放在db1
item分片,轮询dn2、dn3主机,分别放到db2、db3的数据库中。

这个网址进行配置。

IP主机名数据库名安装内容
172.16.10.3dn3db3mysql
172.16.10.2dn2db2mysql
172.16.10.1dn1db1mysql、java、mycat

mysql:
每台机都建一个用户

grant all on *.* to xxx@'%' identified by 'xxxx';

如提示ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
则输入:

set global validate_password_policy=0;

10.1:

create database db1;
CREATE TABLE users (
id INT NOT NULL AUTO_INCREMENT,
name varchar(50) NOT NULL default '',
indate DATETIME NULL,
PRIMARY KEY (id)  
)AUTO_INCREMENT= 1 ENGINE=InnoDB DEFAULT CHARSET=utf8;

10.2:

create database db2;
CREATE TABLE item (
id INT NOT NULL AUTO_INCREMENT,
value INT NOT NULL default 0,
indate DATETIME  NULL ,
PRIMARY KEY (id)  
)AUTO_INCREMENT= 1 ENGINE=InnoDB DEFAULT CHARSET=utf8;

10.3:

create database db3;
CREATE TABLE item (
id INT NOT NULL AUTO_INCREMENT,
value INT NOT NULL default 0,
indate DATETIME  NULL ,
PRIMARY KEY (id)  
)AUTO_INCREMENT= 1 ENGINE=InnoDB DEFAULT CHARSET=utf8;

java:
https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
下载java

tar -zxvf xxx.tar.gz
mkdir -p /usr/java
mv xxx /usr/java/
vi /etc/profile

/etc/profile末尾加上:

export JAVA_HOME=/usr/java/jdk1.8.0_191
export JRE_HOME=/usr/java/jdk1.8.0_191/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH

保存后

source /etc/profile

mycat:
http://dl.mycat.io/1.6-RELEASE/
下载linux版本

tar -zxvf xxx.tar.gz
mv xxx /home/mycat
开启:/home/mycat/bin/mycat start
停止:/home/mycat/bin/mycat stop

配置:
所有配置文件都在mycat/conf下:
server.xml:
最尾加上

<user name="test">
	<property name="password">test</property>
	<property name="schemas">TESTDB</property>
</user>

rule.xml:

新增:
<tableRule name="role1">
	<rule>
		<columns>id</columns><!--根据id分片-->
		<algorithm>mod-long</algorithm><!--根据什么算法分片-->
	</rule>
</tableRule>
修改:
<function name="mod-long" class="io.mycat.route.function.PartitionByMod">
	<property name="count">2</property><!--轮询多少台机-->
</function>

schema.xml:

<schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100">
	<table name="users" primaryKey="id"  dataNode="dn1" />	<!--user这个表不分片,只保存在users表-->
	<table name="item" primaryKey="id" dataNode="dn2,dn3" rule="role1" /><!--在dn2、3之间轮询分片-->
</schema>

<dataNode name="dn1" dataHost="172.16.10.1" database="db1" />
<dataNode name="dn2" dataHost="172.16.10.2" database="db2" />
<dataNode name="dn3" dataHost="172.16.10.3" database="db3" />
<!--这里分了3台主机来做分片,如果一台主机来做分片也是可以的-->
<dataHost name="172.16.10.1" maxCon="1000" minCon="10" balance="0" writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
	<heartbeat>select user()</heartbeat>
	<writeHost host="172.16.10.1" url="172.16.10.1:6665" user="xxxx" password="xxx" />
</dataHost>
<dataHost name="172.16.10.2" maxCon="1000" minCon="10" balance="0" writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
	<heartbeat>select user()</heartbeat>
	<writeHost host="172.16.10.2" url="172.16.10.2:3306" user="xxxx" password="xxx" />
</dataHost>
<dataHost name="172.16.10.3" maxCon="1000" minCon="10" balance="0" writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
	<heartbeat>select user()</heartbeat>
	<writeHost host="172.16.10.3" url="172.16.10.3:6665" user="xxxx" password="xxx" />
</dataHost>

如果是一台主机

<dataHost name="dh1" maxCon="1000" minCon="10" balance="0" writeType="0" dbType="mysql" dbDriver="native">  
   	<heartbeat>select user()</heartbeat>
	<writeHost host="server1" url="127.0.0.1:3306" user="root" password="123456"/>
</dataHost> 

测试:

mysql -utest -p -h127.0.0.1 -P8066 -DTESTDB
insert into users(name,indate) values('abcd',now());
insert into users(name,indate) values('lmmmld',now());
insert into item(id,value,indate) values(1,170,now());
insert into item(id,value,indate) values(2,150,now());

10.1:
mycat:
10.1的mycat
mysql:
10.1的mysql
10.2:
10.2的mysql
10.3:
10.3的mysql

mycat不适用的场景:
1、冗余数据的查询会造成,由于每个节点都存在该数据,导致每个节点都会运行,如果是查询5000条数据,有3个节点,则会是3*5000条的计算量。
2、多表查询时,join的表不在同一个节点上时,会查询不出数据。
3、还有一些分页排序、事务问题,这个没深入了解,懒,哈哈。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值