MyCat5分钟简单入门
MyCat5简单入门
之前的一篇博客, 讲了mycat的基本概念, 这篇博客就让我们简单的使用一些mycat吧.
还是先看一下老夫本地测试的架构图:
mycat安装
去官网下载最新版本的 mycat, 根据你的系统下载对应的版本.然后上传到128服务器.
我上传到的是/home/tools/mycat
目录, 进入目录, 解压mycat:
tar -zxvf Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz
解压完成后, 会出现一个mycat的目录, 进入这个目录配置mycat
配置mycat
1. 配置server.xml
进入mycat的conf目录, 修改server.xml这个配置文件,修改如下:
<user name="root">
<property name="password">123456</property>
<property name="schemas">user</property>
</user>
这里面配置的是mycat的登录用户, 密码, 和数据库.我使用的是名字为user的数据库, 那么后面连接上mycat后, 我们就需要新建一个名字为user的数据库
注意: server.xml里面默认又2个用户, 一个是root, 一个是user, 我们可以2个都配置,也可以注释一个.如果2个用户都使用, 就要注意修改schemas为一致
2. 配置schema.xml
同样在conf目录下面, 修改schema.xml. 这个文件很重要, 下面咱们一步一步的配置.
2.1 第一步 配置dataHost
dataHost就是配置我们MySQL数据数据库连接.配置如下:
<dataHost name="db130" 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="M1" url="172.16.224.130:3306" user="root"
password="123456">
<!-- can have multi read hosts -->
<!--<readHost host="hostS2" url="192.168.1.200:3306" user="root" password="xxx" /> -->
</writeHost>
<!--
<writeHost host="hostS1" url="localhost:3316" user="root"
password="123456" />
-->
<!-- <writeHost host="hostM2" url="localhost:3316" user="root" password="123456"/> -->
</dataHost>
修改:
dataHost节点修改: name配置为: db130 # 表示这个数据节点连接的是我们130服务器的mysql
readHost节点是读库配置, 这里我们暂时不配置读库.
因为我们有2条mysql服务器,所以这里需要配置2个dataHost, 这个是另一个配置, 跟上面的基本一样
<dataHost name="db131" 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="M1" url="172.16.224.131:3306" user="root"
password="123456">
<!-- can have multi read hosts -->
<!--<readHost host="hostS2" url="192.168.1.200:3306" user="root" password="xxx" /> -->
</writeHost>
<!--
<writeHost host="hostS1" url="localhost:3316" user="root"
password="123456" />
-->
<!-- <writeHost host="hostM2" url="localhost:3316" user="root" password="123456"/> -->
</dataHost>
2.2 第二步 配置dataNode
dataNode 是配置mycat的数据节点,配置如下:
<dataNode name="dn130" dataHost="db130" database="user_130" />
<dataNode name="dn131" dataHost="db131" database="user_131" />
dn130和dn131是dataNode的名字, dataHost就是配置上一步对应的配置. database就是配置真是真实服务器中的库名称.(到最后你就应该明白了)
2.3 第三步 配置schema
这里是配置mycat的分片规则, 我们先来配置一个最简单的.配置如下:
<schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100">
<!-- auto sharding by id (long) -->
<table name="user" dataNode="dn130,dn131" rule="auto-sharding-long" />
</schema>
这里就是主要修改dataNode,修改为我们之前配置的node. 至于后面的rule分片规则, 我们后面再讲, 先配置为默认
3. 在130和131的mysql里面创建数据库
分别在2个mysql里面创建数据库, 注意数据库的名称要与dataNode里面配置的名称一致.表的名称要与2.3节里面的table名字一致.
3.1 创建数据库
130的mysql里面创建数据库:
131的mysql创建数据库:
注意: 数据库的名称要与dataNode里面配置的名称保持一致
3.2 创建表
这里创建一个简单的表用于演示, 在2个mysql里面分别执行,
create table user (
id bigint(11) primary key not null auto_increment comment '主键ID',
username varchar(50) comment '用户名称'
) comment '用户表';
注意: 表的名称要与schema标签里面配置的table名字保持一致.
启动mycat
回到mycat的根目录, 运行这个命令启动mycat:
[root@#localhost mycat]# ./bin/mycat console
注意加上 console
参数, 表示在前台启动, 能够在控制台里面打印出启动日志, 方便我们调试.
启动可能会遇到的问题
1.服务器没有安装JDK
通过这个信息可以很容易的看出来, 找不到jvm. 那么解决方法就很简单了, 就是在服务器上安装JDK.这个我就展示了, 网上很多教程.
1.table的rule规则有问题
可以通过日志看出, 规则里面有这样一个东东 3 > table datanode size : 2
这个就是问题的关键.
出现这个错误的原因是这样子滴, 我们之前配置table的rule是这样配置的auto-sharding-long
.然后我们去看conf里面的配置文件, 可以找到一个rule.xml
的配置, 然搜索错误日志里面的rang-long
可以找到这样一个东东:
可以看出, 映射的文件是autopartition-long.txt
. 我们可以在配置里面找到这样一个文件,打开看到的是这样子滴:
这里其实就是配置的数据库分片的规则, 比如上面这个配置表示,ID为0到500M的数据分配到节点0,ID为500M-1000M的数据分配到节点1, ID为1000M-1500M的数据分配到节点2. 但是我们其实只有2个节点, 但是这里配置的是3个, 所以就报错了.我们删除最后一个节点就完事了
1.配置的小错误 重新启动mycat发现又报错了,这次是一个配置的错误:
发现我们在第2.3步里面的schema名称是TESTDB, 这个应该修改为我们server.xml里面配置的名称:user 正确的配置如下:
<schema name="user" checkSQLschema="false" sqlMaxLimit="100">
<!-- auto sharding by id (long) -->
<table name="user" dataNode="dn130,dn131" rule="auto-sharding-long" />
</schema>
解决完上面的问题, 基本上就能启动成功啦~ 下面就可以用我们的数据库连接工具来连接mycat了
注意: 连接的时候, mycat的默认端口是8066哟
连接上mycat后, 可能会遇到这个错误:
find no Route:select * from `user`.`user` limit 0, 100
修改方法如下: 修改schema.xml的checkSQLschema="false" 改为true, 当这个值为true的时候, 我们执行语句select * from user.user 。mycat会把语句修改为 select * from user 去掉前面的user(也就是数据库的名称)。
测试插入数据
我们在mycat里面分别执行着2个语句
INSERT INTO `user`.`user`(`id`, `username`) VALUES (1, 'test1');
INSERT INTO `user`.`user`(`id`, `username`) VALUES (5500000, 'test3');
然后我们会看到这两个数据分别在2个数据库里面, 这就是mycat的分片:
130mysql看到的结果:
131mysql看到的结果:
可以看出我们的mycat是配置成功了滴~
到此, 我们的mycat简单入门教程就结束了~