myCat 分库分表
1. 下载
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)
这个时候你可以启动了(不改配置也是可以启动)
启动和连接测试
连接:(前面我改了端口6066和密码12345678)
打开之后
有一个TESTDB的数据库
修改个数库名字 (标准叫法schema)
我不喜欢这个名字,我要把TESTDB 改成我喜欢的库名 mycatDB
配置文件:schema.xml
改这是不够的。账号的权限也要改,改账号权限在 server.xml ,就是改密码的地方
现在有两个账号root和user (内置了两个账号,加账号就是这里 ) ,启动不了,schemas不对,我只配置了mycatDB,所以现在只能改成这个。
重启 ( 关了、再双击)
打开连接,打开DB有两个表,明显我不喜欢
前置条件 本地有两个数据库( mydb1,mydb2) 两个数据库中都有 user和user_log两个表,每个表增加一个字段mod_id(int) 用于分区
用的我表 (我的表user和user_log) ( 修改配置文件要重启才能生效,后面我就不说了)
4 配置库表 conf\schema.xml
前置场景
我修改了mycat数据库的名字 (我改成了叫MYDB)我修改了表(我要用user和user_log),重启后生效。同时我也修改了分区的规则 我用的是my_mod-long_mod
配置rule.xml
我自定的一个规则
名称:my-mod-long
字段:mod_id (我前面说了要加的这个字段)
算法: mod-log (内置的,就是取模 )
我的想法说是根据,我对字段mod_id来取模,然后分配到不同的库
我现在只有2个库,所以我只需要有2个dn (默认是dn1、dn2、dn3) 这里删除了1个,这个时候你是启不来的。
原因是 rule.xml 这是配置的是3个 ( 默认就是这个3,对不上,报错了 ,如果只有2个,可以改成2)
( 这样的坑多,用规则的时候要注意 )
一切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插入数据,自动分配到其它分表