Mycat使用笔记
2019-10-17 本文已影响0人
Captain_tu
项目中的表数据量过千万,考虑分库分表,这里是调研mycat的笔记
安装
- 依赖
- jdk
安装java环境 - mysql
mysql5.6 - 系统
centos7
- jdk
- 安装
-
下载
到官网下载,解压到mycat目录 -
配置server.xml
config/server.xml
中配置root用户和user用户的密码及数据库schema -
配置schema.xml
config/schema.xml
中配置<schema name="mycat" checkSQLschema="true" sqlMaxLimit="100"> <!-- auto sharding by id (long) --> <table name="user" dataNode="dn1,dn2" primaryKey="id" autoIncrement="true" rule="auto-sharding-long" /> <!-- <table name="oc_call" primaryKey="ID" dataNode="dn1$0-743" rule="lamycat-month-calldate" /> --> </schema>
上边这段配置表user分两个node存储,使用的规则是
auto-sharding-long
,且使用的id自增<!-- 分片配置 --> <dataNode name="dn1" dataHost="mycat1" database="mycat" /> <dataNode name="dn2" dataHost="mycat2" database="mycat" /> <!-- 物理数据库配置 --> <dataHost name="mycat1" 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="172.16.194.132:3306" user="root" password="abc123"> </writeHost> <!-- <writeHost host="hostM2" url="localhost:3316" user="root" password="123456"/> --> </dataHost> <dataHost name="mycat2" 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="hostS1" url="172.16.194.1:3306" user="root" password="abc123"> </writeHost> <!-- <writeHost host="hostM2" url="localhost:3316" user="root" password="123456"/> --> </dataHost>
这一段配置两个分片的连接信息,每一个分片包含一个dataNode配置和一个dataHost配置,dataHost配置分片的连接信息
-
配置分片规则
<tableRule name="auto-sharding-long"> <rule> <columns>id</columns> <algorithm>rang-long</algorithm> </rule> </tableRule> <function name="rang-long" class="io.mycat.route.function.AutoPartitionByLong"> <property name="mapFile">autopartition-long.txt</property> </function>
在
config/rule.xml
中看到,'auto-sharding-long'根据id分片,使用的算法是'rang-long'
同样在config/rule.xml
中,看到'rang-long'在'autopartition-long.txt'配置规则# range start-end ,data node index # K=1000,M=10000. 0-1K=0 1K-100K=1
上边配置的规则为,id小于等于1000的存入第一个node分片,id大于1000,小于等于100000的,存入第二个node分片(分片在之前的schema.xml中配置)
-
启动
- 启动
执行命令bin/mycat
即可启动mycat,在log中监控是否成功启动 - 问题
- 内存问题
# There is insufficient memory for the Java Runtime Environment to continue. # Native memory allocation (mmap) failed to map 357892096 bytes for committing reserved memory.
free -h
查看发现机器内存不足,清理之后即可成功启动。- 插入时报错,无法自增id
修改server.xml
中,取消注释
这个配置sequnceHandlerType=0表示,自增的id存储到本地文件中,另外可以配置到数据库(sequnceHandlerType=1)、本地时间戳方式(sequnceHandlerType=2),可以自行查找怎么配置<property name="sequnceHandlerType">0</property>
在sequence_conf.properties
中,可以配置当前表自增id从多少开始,最高到多少,以及当前到多少USER.MAXID=20000 USER.CURID=0 USER.MINID=0
- mycat启动默认端口号为8066,只需要将项目连接信息,改为连接8066即可