myCat 分库分表

1. 下载

http://www.mycat.io/

 

 

2 Mycat解压、启动 (windows )

前置条件:mycat 解析在 D:\myapp\mycat

启动

bin\startup_nowrap.bat (先配置好,再双击启动)

 

3. conf : 环境配置文件server.xml 

conf\server.xml  (DB账号及数据库配置)

 

mycat 启动端口 ,默认8066(没有配置项,内置默认的),我现在改成了6066

<property name="serverPort">6066</property>

 

修改root账号密码 (我现在的密码是12345678)

myCat 分库分表

这个时候你可以启动了(不改配置也是可以启动)

 

启动和连接测试

连接:(前面我改了端口6066和密码12345678)

myCat 分库分表

 

打开之后

有一个TESTDB的数据库

 

修改个数库名字 (标准叫法schema)

我不喜欢这个名字,我要把TESTDB 改成我喜欢的库名 mycatDB

配置文件:schema.xml

myCat 分库分表

改这是不够的。账号的权限也要改,改账号权限在 server.xml ,就是改密码的地方

现在有两个账号root和user (内置了两个账号,加账号就是这里 ) ,启动不了,schemas不对,我只配置了mycatDB,所以现在只能改成这个。

myCat 分库分表

 

重启 ( 关了、再双击)

打开连接,打开DB有两个表,明显我不喜欢

前置条件 本地有两个数据库( mydb1,mydb2) 两个数据库中都有 user和user_log两个表,每个表增加一个字段mod_id(int) 用于分区

 

用的我表 (我的表user和user_log) ( 修改配置文件要重启才能生效,后面我就不说了)

myCat 分库分表

 

 

4 配置库表 conf\schema.xml

前置场景

 

我修改了mycat数据库的名字 (我改成了叫MYDB)我修改了表(我要用user和user_log),重启后生效。同时我也修改了分区的规则 我用的是my_mod-long_mod

myCat 分库分表

 

配置rule.xml

我自定的一个规则

名称:my-mod-long

字段:mod_id (我前面说了要加的这个字段)

算法: mod-log (内置的,就是取模 )

 

我的想法说是根据,我对字段mod_id来取模,然后分配到不同的库

myCat 分库分表

我现在只有2个库,所以我只需要有2个dn (默认是dn1、dn2、dn3) 这里删除了1个,这个时候你是启不来的。

原因是 rule.xml 这是配置的是3个 ( 默认就是这个3,对不上,报错了 ,如果只有2个,可以改成2)

( 这样的坑多,用规则的时候要注意 )

myCat 分库分表

 

一切OK,重启 ,测试

在mycatDB中打开表 ,在mod_id中输入不同的值,在对应的数据库中查看数据,即对数据自动进行了分区

 

同库分表

前置条件

创建表

user_access_log ( 主键 lid ,分区字段mod_id)

复制3份,命名

user_access_log1

user_access_log2

user_access_log3

 

schama.xml 配置表

<table name="user_access_log" primaryKey="lid" dataNode="dn1" autoIncrement="false" subTables="user_access_log$1-3" rule="my-mod-long-3" />

 

rule.xml 配置规则

my-mod-long-3 (3个表,所以取模为3)

<tableRule name="my-mod-long-3"> <rule> <columns>mod_id</columns> <algorithm>mod-long-3</algorithm> </rule> </tableRule>

 

 

mod-long-3 (算法) 主要是这个3

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

 

配置完成,重启

往mycatDB user_access_log插入数据,自动分配到其它分表