首先下载mycat的win安装包,下载地址:
https://github.com/MyCATApache/Mycat-download
下载后直接解压缩
例如我这里解压缩到 d:\mycat
首先要配置环境变量
新建一个系统变量:MYCAT_HOME,值为 d:\mycat
编辑path环境变量,增加 %MYCAT_HOME%\bin;
完成重启。
然后直接双击运行bin目录下的startup_nowrap.bat文件,如果运行成功会显示如下:
此时mycat已经成功运行。
可以用cmd命令行连接mysql 测试是否能连接
mysql -uroot -p123456 -P8066 -h127.0.0.1
startup_nowrap.bat运行失败的情况:
首先需要在cmd命令行运行startup_nowrap.bat,然后查看他的报错信息。Mycat需要jdk支持,并设置正确的环境变量。具体方法请参考网上的教程。
运行失败主要原因还是环境变量设置出错或者JDK的路径问题
原始的startup_nowrap.bat文件内容如下
我碰到过这几种错误:
1、Error: missing`server' JVM at `C:\Java\jre1.8\bin\server\jvm.dll'.
Please install or use the JRE or JDK thatcontains these missing components.
这个错误是因为JAVA_HOME路径没有设置正确,解决方法是在环境变量中设置正确的JAVA_HOME或者将set "JAVA_CMD=java"这一行改为你的JDK地址,比如set"JAVA_CMD=C:\Java\jdk1.8.0_144\bin\java",即可运行成功。
2、Error occurredduring initialization of VM
Could not reserve enough space for2097152KB object heap
这个错误是因为设置的内存超出了你的实际物理内存问题,我将他修改为-Xms512M -Xmx512M 即可通过运行。
也可以用navicat连接mycat
测试运行成功后,我们需要对MYCAT进行一些配置。
--bin 启动目录
--conf 配置文件存放配置文件:
--server.xml:是Mycat服务器参数调整和用户授权的配置文件。
--schema.xml:是逻辑库定义和表以及分片定义的配置文件。
--rule.xml: 是分片规则的配置文件,分片规则的具体一些参数信息单独存放为文件,也在这个目录下,配置文件修改需要重启MyCAT。
首先配置server.xml
因为是测试用,只要配置好mysql用户和数据库即可
然后是schema.xml
逻辑库配置
Schema 定义了逻辑库,其中的table定义了逻辑表
table 标签 是逻辑表的配置 其中
name代表表名,
dataNode代表表对应的分片,
Mycat默认采用分库方式,也就是一个表映射到不同的库上,
rule代表表要采用的数据切分方式,名称对应到rule.xml中的对应配置,如果要分片必须配置。
配置分片(dataNode)
表切分后需要配置映射到哪几个数据库中,Mycat的分片实际上就是库的别名,例如上面例子配置了4个分片dn1,dn2,dn3,dn4 分别对应到物理机映射dataHost host1,host2,host3,host4这4个服务器的数据库上。
配置物理库分片映射(dataHost)
select user()
Mycat作为数据库代理需要逻辑库,逻辑用户,表切分后需要配置分片,分片也就需要映射到真实的物理主机上,至于是映射到一台还是一台的多个实例上,Mycat并不关心,只需要配置好映射即可,例如例子中:
配置了一个名为host1的物理主机(dataHost)映射。
heartbeat 标签代表Mycat需要对物理库心跳检测的语句,正常情况下生产案例可能配置主从,或者多写或者单库,无论哪种情况Mycat都需要维持到数据库的数据源连接,因此需要定时检查后端连接可以性,心跳语句就是来作为心跳检测。
writeHost 此标签代表 一个逻辑主机(dataHost)对应的后端的物理主机映射,例如例子中写库hostM1 映射到127.0.0.1:3306。如果后端需要做读写分离或者多写或者主从则通过配置 多个writeHost 或者readHost即可。
dataHost 标签中的 writeType balance 等标签则是不同的策略,具体参考指南。
最后我们看看role.xml表切分规则配置
id
mod-long
4
在前面我们配置order_info表的切分规则为mod-long,下面是各部分定义
tableRule
name 为schema.xml 中table 标签中对应的 rule="mod-long" ,也就是配置表的分片规则,
columns 是表的切分字段: id 主键ID。
algorithm 是规则对应的切分规则:映射到function 的name。
function
function 配置是分片规则的配置。
name 为切分规则的名称,名字人员取,但是需要与tableRule 中匹配。
class 是切分规则对应的切分类,写死,需要哪种规则则配置哪种,例如本例子是取模分片:io.mycat.route.function.PartitionByMod
property 标签是切分规则对应的不同属性,不同的切分规则配置不同。本例子中是按4取模。
全部配置修改好后,重新启动下MYCAT服务,则规则开始生效。
我们做个简单的测试
分别在4台服务器上建立好同样的数据库pay1和表order_info
--
-- Database: `pay1`
--
CREATE DATABASE IF NOT EXISTS `pay1` DEFAULT CHARACTER SETlatin1 COLLATE latin1_swedish_ci;
USE `pay1`;
-- --------------------------------------------------------
--
-- 表的结构 `order_info`
--
CREATE TABLE `order_info` (
`id` int(10)UNSIGNED NOT NULL COMMENT 'ID',
`uid` int(10)UNSIGNED NOT NULL COMMENT '用户ID',
`name` varchar(20)NOT NULL COMMENT '订单名',
`add_time`timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '添加时间'
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COMMENT='订单表';
然后建立一个测试的文件 test.php,插入一些测试数据
执行完毕后就可以看到数据库中的结果: