windows下安装配置mycat

来源:互联网 发布:python socket select 编辑:程序博客网 时间:2024/06/10 02:25

首先下载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 name="pay" checkSQLschema="false" sqlMaxLimit="100"><table name="order_info" primaryKey="id" autoIncrement="true"  dataNode="dn1,dn2,dn3,dn4" rule="mod-long" /></schema>

Schema 定义了逻辑库,其中的table定义了逻辑表

table 标签 是逻辑表的配置 其中

name代表表名,

dataNode代表表对应的分片,

Mycat默认采用分库方式,也就是一个表映射到不同的库上,

rule代表表要采用的数据切分方式,名称对应到rule.xml中的对应配置,如果要分片必须配置。


配置分片(dataNode)

<dataNode name="user" dataHost="host1" database="user" /><dataNode name="dn1" dataHost="host1" database="pay1" /><dataNode name="dn2" dataHost="host2" database="pay1" /><dataNode name="dn3" dataHost="host3" database="pay1" /><dataNode name="dn4" dataHost="host4" database="pay1" /><dataNode name="log" dataHost="host1" database="log" />

表切分后需要配置映射到哪几个数据库中,Mycat的分片实际上就是库的别名,例如上面例子配置了4个分片dn1,dn2,dn3,dn4 分别对应到物理机映射dataHost host1,host2,host3,host4这4个服务器的数据库上。


 配置物理库分片映射(dataHost)

<dataHost name="host1" maxCon="1000" minCon="10" balance="0"  writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100"><heartbeat>select user()</heartbeat><writeHost host="hostM1" url="127.0.0.1:3306" user="root" password="123456" ><readHost host="hostS1" url="127.0.0.1:3306" user="root" password="123456" /></writeHost></dataHost>


Mycat作为数据库代理需要逻辑库,逻辑用户,表切分后需要配置分片,分片也就需要映射到真实的物理主机上,至于是映射到一台还是一台的多个实例上,Mycat并不关心,只需要配置好映射即可,例如例子中:

配置了一个名为host1的物理主机(dataHost)映射。

heartbeat 标签代表Mycat需要对物理库心跳检测的语句,正常情况下生产案例可能配置主从,或者多写或者单库,无论哪种情况Mycat都需要维持到数据库的数据源连接,因此需要定时检查后端连接可以性,心跳语句就是来作为心跳检测。

writeHost 此标签代表 一个逻辑主机(dataHost)对应的后端的物理主机映射,例如例子中写库hostM1 映射到127.0.0.1:3306。如果后端需要做读写分离或者多写或者主从则通过配置 多个writeHost 或者readHost即可。

dataHost 标签中的 writeType balance 等标签则是不同的策略,具体参考指南。


最后我们看看role.xml表切分规则配置

<tableRule name="mod-long"><rule><columns>id</columns><algorithm>mod-long</algorithm></rule></tableRule>
<function name="mod-long" class="io.mycat.route.function.PartitionByMod"><!-- how many data nodes --><property name="count">4</property></function>



在前面我们配置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,插入一些测试数据

<?php$link = mysqli_connect('127.0.0.1','root','123456','pay','8066') or die('Database not connect!');//连接数据库mysqli_query($link,"set names utf8");$sql = "INSERT INTO `order_info`(`id`,`uid`,`name`) VALUES";for($i=1;$i<100;$i++){    $sql .= "('$i','$i','3'),";  }$sql = substr($sql, 0,-1);$rst = mysqli_query ( $link,$sql ); ?>


执行完毕后就可以看到数据库中的结果:


 

原创粉丝点击