Windows
第一步
下载MyCat:
https://github.com/MyCATApache/Mycat-Server/releases
第二步
解压压缩包得到以下目录。
第三步
新建一个系统变量:MYCAT_HOME,值为 d:\mycat
第四步
编辑path环境变量,增加 %MYCAT_HOME%\bin;
第五步
然后直接双击运行bin目录下的startup_nowrap.bat文件,如果运行成功会显示如下:
主要配置介绍
server.xml :定义用户以及系统相关变量,如端口等;
schema.xml :定义逻辑库,表、分片节点等内容;
rule.xml :定义分片规则。
server.xml
在server.xml中主要配置mycat。如:访问mycat的用户密码、端口号等。如下图
<!-- name:mycat用户名 -->
<user name="root" defaultAccount="true">
<!-- mycat密码 -->
<property name="password">maluole</property>
<!-- 对应schema.xml文件中的schema标签的name -->
<property name="schemas">mycat1</property>
</user>
schema.xml
schema.xml文件中,主要对逻辑库,表、分片节点等内容
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
<!-- name:自定义名字,对应server.xml中的schemas
checkSQLschema:查询时是否增加库名称。如db1.table。false不加
sqlMaxLimit :一次最大读取行数
-->
<schema name="mycat1" checkSQLschema="true" sqlMaxLimit="100">
<!--
table为需要分库分表的数据表
name:对应数据库中的表名
dataNode:对应下面dataNode节点的名字,即:需要拆分到的库。多个用逗号分隔
primaryKey:当前数据库表中对应的主键
rule:排序规则名称,对应rule.xml文件tableRule的name
-->
<table name="books" dataNode="mycat1datanode,mycat2datanode" primaryKey="id" rule="auto-sharding-long"/>
</schema>
<!--
dataNode为需要用到的库
name:自定义名字,需要与上面table中dataNode对应
dataHost:对应下面dataHost的名字,即:对应该数据库的登陆名、密码等设置
database:数据库名称
-->
<dataNode name="mycat1datanode" dataHost="localhost1" database="mycat1" />
<dataNode name="mycat2datanode" dataHost="localhost1" database="mycat2" />
<!--
name:唯一标识 dataHost 标签,供上层的标签使用
maxCon 指定每个读写实例连接池的最大连接。
minCon 指定每个读写实例连接池的最小连接,初始化连接池的大小。
balance 负载均衡类型,目前的取值有4 种: “0”, 不开启读写分离机制,所有读操作都发送到当前可用的 writeHost 上。 “1”,全部的 readHost 与 stand by writeHost 参与 select 语句的负载均衡,简单的说,当双主双从模式(M1->S1,M2->S2,并且 M1 与 M2 互为主备),正常情况下,M2,S1,S2 都参与 select 语句的负载均衡。”2”,所有读操作都随机的在 writeHost、readhost 上分发。”3”,所有读请求随机的分发到 wiriterHost 对应的 readhost 执行,writerHost 不负担读压writeType 1. writeType=”0”, 所有写操作发送到配置的第一个 writeHost,第一个挂了切到还生存的第二个writeHost,重新启动后已切换后的为准,切换记录在配置文件中:dnindex.properties .2. writeType=”1”,所有写操作都随机的发送到配置的 writeHost,1.5 以后废弃不推荐。默认0就好了!
dbType 指定后端连接的数据库类型,目前支持二进制的 mysql 协议,还有其他使用 JDBC 连接的数据库。例如:mongodb、oracle、spark 等.
dbDriver 指定连接后端数据库使用的 Driver,目前可选的值有 native 和 JDBC。使用 native 的话,因为这个值执行的是二进制的 mysql 协议,所以可以使用 mysql 和 maridb。其他类型的数据库则需要使用 JDBC 驱动来支持。
switchType “-1” 表示不自动切换; “1” 默认值,自动切换; “2” 基于 MySQL 主从同步的状态决定是否切换心跳语句为 show slave status; “3” 基于 MySQL galary cluster 的切换机制(适合集群)(1.4.1)心跳语句为 show status like ‘wsrep%’.
tempReadHostAvailable 如果配置了这个属性 writeHost 下面的 readHost 仍旧可用,默认 0 可配置(0、1)。
-->
<dataHost name="localhost1" maxCon="1000" minCon="10" balance="0"
writeType="0" dbType="mysql" dbDriver="jdbc" switchType="1" slaveThreshold="100">
<!--
这个标签内指明用于和后端数据库进行心跳检查的语句。
例如:MYSQL 可以使用 select user(),Oracle 可以使用 select 1 from dual 等。
-->
<heartbeat>select user()</heartbeat>
<writeHost host="hostM1" url="jdbc:mysql://localhost:3306" user="root" password="maluole"></writeHost>
</dataHost>
</mycat:schema>
rule.xml
rule标签定义分片规则,就是数据根据什么规则拆分。此处需要注意,拆分的节点要和真是节点一样。比如一共就配置了2个库做拆分。那么对应的规则文件也只配置2个。
比如在scheme.xml中的table配置
<table name="books" dataNode="mycat1datanode,mycat2datanode" primaryKey="id" rule="auto-sharding-long"/>
分片规则:【rule=“auto-sharding-long” 】
库实例:【dataNode=“mycat1datanode,mycat2datanode”】
在rule.xml文件找到对应的【auto-sharding-long】,如图
然后根据【rang-long】找到对应的【function】。如图
具体的分片规则在文件中查看。如图
【0-500=0】:id在0<=id<=500之间都在第一个库
【500-1K】id在500<=id<=1000之间都在第二个库
注意:如果没有第三个库不要配置
# range start-end ,data node index
# K=1000,M=10000.
0-500=0
500-1K=1