mycat入门小试

mycat是什么?mycat本质是关系型数据库中间件。

mycat解决了什么问题,让我们实现无感知的分表,就是分表之后还是像以前单表那样子使用。

 

安装:

因为mycat是java写的,所以要先安装java。(安装java可以参考:https://blog.yubang.app/?p=31)

然后在官网下载对应版本,官网是http://www.mycat.io/

然后解压,即可运行

运行命令如下:


./mycat start 启动

./mycat stop 停止

./mycat console 前台运行

./mycat install 添加到系统自动启动(暂未实现)

./mycat remove 取消随系统自动启动(暂未实现)

./mycat restart 重启服务

./mycat pause 暂停

./mycat status 查看启动状态

 

最关键一步,就是配置。我们只需要关心conf/server.xml,conf/schema.xml,conf/rule.xml这三个文件

 

1.conf/server.xml这个文件是用来配置mycat的系统参数和登录用的用户名密码


<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mycat:server SYSTEM "server.dtd">
<mycat:server xmlns:mycat="http://io.mycat/">
<system>
<property name="useSqlStat">0</property>
<property name="useGlobleTableCheck">0</property>

<property name="sequnceHandlerType">2</property>

<property name="processorBufferPoolType">0</property>

<property name="handleDistributedTransactions">0</property>

<property name="useOffHeapForMerge">1</property>

<property name="memoryPageSize">1m</property>

<property name="spillsFileBufferSize">1k</property>

<property name="useStreamOutput">0</property>

<property name="systemReserveMemorySize">384m</property>

<property name="useZKSwitch">true</property>

</system>


<user name="root">
<property name="password">123456</property>
<property name="schemas">schema1</property>

</user>

<user name="user">
<property name="password">user</property>
<property name="schemas">schema1</property>
<property name="readOnly">true</property>
</user>

</mycat:server>

 

可以看到<system>标签里面是mycat的基本配置,然后<user>标签是配置登录的用户名和密码,其中name是用户名,password是密码schemas是分片策略。

 

2.conf/schema.xml文件是指定分片策略的


<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">

<mycat:schema xmlns:mycat="http://io.mycat/">
<schema name="schema1" checkSQLschema="true" sqlMaxLimit="100" >
<table name="user" primaryKey="id" autoIncrement="true" dataNode="d1,d2,d3,d4,d5" rule="rule1"/>
</schema>

<dataNode name="d1" dataHost="localhost1" database="db1"/>
<dataNode name="d2" dataHost="localhost1" database="db2"/>
<dataNode name="d3" dataHost="localhost1" database="db3"/>
<dataNode name="d4" dataHost="localhost1" database="db4"/>
<dataNode name="d5" dataHost="localhost1" database="db5"/>

<dataHost name="localhost1" writeType="0" switchType="1" slaveThreshold="100" balance="1" dbType="mysql" maxCon="10" minCon="1" dbDriver="native">
<heartbeat>show status like 'wsrep%'</heartbeat>
<writeHost host="hostM1" url="127.0.0.1:3306" user="root" password="root" >
</writeHost>
</dataHost>
</mycat:schema >

 

dataHost标签是配置我们真实的数据库信息,name是一个自定义名字,heartbeat是用于保持心跳的,writeHost 是表示写库,host=”hostM1″不需要修改,url是数据库地址,user是数据库用户名,password是数据库密码

dataNode标签是指定一个数据库里面的database,name是自定义名称,dataHost是dataHost标签的name名字,database是我们的数据库名字

schema标签是分片配置,也是conf/schema.xml文件需要的schemas。name是自定义名字,也是conf/schema.xml文件指向的名字。table 标签是配置具体的表,dataNode分散到那些database,rule是指定分布规则。

 

3.conf/rule.xml这个文件是配置表如何分散到若干个数据库规则的

 


<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mycat:rule SYSTEM "rule.dtd">

<mycat:rule xmlns:mycat="http://io.mycat/">
<tableRule name="rule1">
<rule>
<columns>id</columns>
<algorithm>func1</algorithm>
</rule>
</tableRule>

<function name="func1" class="io.mycat.route.function.PartitionByMod">
<!-- how many data nodes -->
<property name="count">5</property>
</function>

</mycat:rule >

 

tableRule标签是定义规则的,name是规则名字,columns是用于指定分片规则的表字段,algorithm是指定分片函数的

function标签是定义分片函数的,name是自定义名字,class对应内置的分片策略,property 是指定一些参数,各种分片策略是不同的

 

分表之后最总要一个事情就是自增id了,最简单的方法,conf/server.xml里面的<property name=”sequnceHandlerType”>2</property>定义成2,然后conf/schema.xml的table指定autoIncrement,然后字段记得定义成bigint,然后插入就会采用本地时间戳方式生成id

 

我们要测试mycat,可以用命令行测试


mysql -u root -P8066 -h 127.0.0.1 -p

然后数据库选择用户名对应的schemas,里面的表就是schemas配置的table,剩下的操作跟平时是一致的。

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注