一.安装与启动
下载地址
下载完成解压后,即为下面这个目录
参数配置
在mycat运行之前,一般需要修改JVM配置参数,打开conf/wrapper.conf文件,如下为我的配置参数
# Java Application
wrapper.java.command=C:\Program Files (x86)\Java\jdk1.8.0_25\bin\java.exe
# Java Additional Parameters
#wrapper.java.additional.1=
wrapper.java.additional.1=-DMYCAT_HOME=.
wrapper.java.additional.2=-server
wrapper.java.additional.3=-XX:MaxPermSize=64M
wrapper.java.additional.4=-XX:+AggressiveOpts
wrapper.java.additional.5=-XX:MaxDirectMemorySize=100M
wrapper.java.additional.6=-Dcom.sun.management.jmxremote
wrapper.java.additional.7=-Dcom.sun.management.jmxremote.port=1984
wrapper.java.additional.8=-Dcom.sun.management.jmxremote.authenticate=false
wrapper.java.additional.9=-Dcom.sun.management.jmxremote.ssl=false
wrapper.java.additional.10=-Xmx100m
wrapper.java.additional.11=-Xms100m
wrapper.java.additional.12=-XX:+UseParNewGC
wrapper.java.additional.13=-XX:+UseConcMarkSweepGC
wrapper.java.additional.14=-XX:+UseCMSCompactAtFullCollection
wrapper.java.additional.15=-XX:CMSFullGCsBeforeCompaction=0
wrapper.java.additional.16=-XX:CMSInitiatingOccupancyFraction=70
启动
在安装目录下的bin目录,运行startup_nowrap.bat,如果出现闪退,在cmd 命令行运行,可以查看出错原因
如果遇到这问题
could not reserve enough space for 2097152KB object heap
除了rapper.xml中内存参数外,还需修改mycat/bin/startup_nowrap.sh下的jvm参数,将参数值改为小一些
“%JAVA_CMD%” -server -Xms512M -Xmx600M -XX:MaxPermSize=600M -XX:+AggressiveOpts
再次运行
E:\mycat\bin>“C:\Program Files (x86)\Java\jdk1.8.0_25/bin/java” -server -Xms512M -Xmx600M -XX:MaxPermSize=600M -XX:+AggressiveOpts -XX:MaxDirectMemorySize=1G -DMYCAT_HOME=E:\mycat -cp “…\conf;…\lib*” io.mycat.MycatStartup
MyCAT Server startup successfully. see logs in logs/mycat.log
启动成功
二.Mycat连接测试
1.配置mycat与mysql的连接相关参数
在安装目录下的config目录下的schema.xml配置文件,
schema.xml配置文件是mycat中重要的配置文件之一,它涵盖了mycat的逻辑库、表、分片规则、分批按节点及数据源。主要配置本机的mysql连接信息。
如下为我的配置相关参数
为了方便测试,我这边是在本机的里面创建3个数据库来测试,mycat,mycat2,mycat3
<dataNode name="dn1" dataHost="localhost1" database="mycat" />
<dataNode name="dn2" dataHost="localhost1" database="mycat2" />
<dataNode name="dn3" dataHost="localhost1" database="mycat3" />
<dataHost name="localhost1" maxCon="1000" minCon="10" balance="0"
writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
<heartbeat>select user()</heartbeat>
<!-- can have multi write hosts -->
<writeHost host="hostM1" url="localhost:3306" user="root" password="888888">
<!-- <readHost host="hostS2" url="localhost:3306" user="root" password="888888" /> -->
</writeHost>
<writeHost host="hostS1" url="localhost:3316" user="root" password="123456" />
</dataHost>
2.测试连接
mycat的用户密码在config目录的server.xml里面有,初始化值为
端口号: 8066 用户:root 密码: 123456
3.测试使用
先在本机创建三个不同的数据库mycat,mycat2,mycat3
3.1全局表测试
在mycat下面执行命令
此时我们创建表company,此表在配置文件schemal.xml有定义,类型为global,节点在dn1,2,3
<table name="company" primaryKey="ID" type="global" dataNode="dn1,dn2,dn3" />
USE TESTDB;
create table company(
id int not null primary key
,name varchar(100)
);
查看执行命令的状态
此时三个节点的库都已创建该表了
测试插入数据
insert into company(id,name) values(1,'company1');
此时三个节点的数据库都已添加了该数据
3.2 测试水平分表分片
在schema.xml里面有定义了表travelrecord,
<table name="travelrecord" dataNode="dn1,dn2,dn3" rule="auto-sharding-long" />
分片规则为auto-sharding-long,这是最简单的范围约定规则
# K=1000,M=10000.
>0-500M=0
500M-1000M=1
1000M-1500M=2
此默认配置可以在配置文件autopartition-long.txt 修改其规则
在命令执行如下命令创建travelrecord表:
explain CREATE TABLE travelrecord (
id int(11) NOT NULL AUTO_INCREMENT,
name varchar(255) NOT NULL,
PRIMARY KEY (id)
)
查看执行状态,三个节点都已创建成功
测试插入数据
explain insert into travelrecord (id,name) values(2,'test');
查看插入状态
此时只插入到节点1,查看数据,其他节点无数据插入
如果在mycat插入数据的时候遇到次问题
[Err] 1064 - partition table, insert must provide ColumnList
则需把所有的列明都添加上