MyCat 分库表,可以使用 join 语句

MyCat 分库表

此教程使用的是单表分两库

目录

MyCat 分库表

ー:下载

二:修改 server.xml    MyCat 服务级别的配置

三:修改 schema.xml 逻辑库的配置 主要配置的是逻辑库,逻辑表,数据节点,和实际数据源之间的关系

四:修改 rule.xml

五:修改 MySQL 数据库

六:测试


ー:下载


目前只有 1.6.5版本 以上支持单库分表。

下载,解压使用即可。

解压后,修改配置文件,在 mycat/conf

 

二:修改 server.xml    MyCat 服务级别的配置


MyCat 的配置文件,设置账号、参数等.

<!-- mycat的8066 端口连接的用户名,密码,逻辑数据库名 -->
<user name="lsq" defaultAccount="true">
        <property name="password">123456</property>
        <property name="schemas">mydb</property>
</user>

设置 user namepasswordschemas; 主要做的功能就是 逻辑库与用户 做映射。

namepassword 在连接代理数据库 MyCat 时使用;

schemas 是逻辑库,要和 schema.xml 里的 schema name 对应。

 

三:修改 schema.xml 逻辑库的配置 主要配置的是逻辑库,逻辑表,数据节点,和实际数据源之间的关系


mycat 逻辑数据库、表的映射关系

mysql 数据节点、所属物理数据库的映射关系。

 

Mycat 对应的物理数据库和数据库表的配置

<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">

    <schema name="mydb" checkSQLschema="true" sqlMaxLimit="100">
        <table name="lsqtable" primaryKey="id" autoIncrement="true" dataNode="dn$1-2" rule="mod-long" />
        <!-- <table name="jointable" primaryKey="id" type="global" dataNode="dn$1-2" autoIncrement="true"  /> -->
    </schema>

    <dataNode name="dn1" dataHost="localhost1" database="mydb" />
    <dataNode name="dn2" dataHost="localhost2" database="mydb" />

    <dataHost name="localhost1" maxCon="1000" minCon="10" balance="0"
              writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100"  maxRetryCount="4">
        <heartbeat>select user()</heartbeat>
        <writeHost host="hostM1" url="192.168.85.128:3306" user="root" password="***">
        </writeHost>
    </dataHost>

    <dataHost name="localhost2" maxCon="1000" minCon="10" balance="0"
              writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100"  maxRetryCount="4">
        <heartbeat>select user()</heartbeat>
        <writeHost host="hostM1" url="192.168.85.130:3306" user="root" password="***">
        </writeHost>
    </dataHost>
    
</mycat:schema>

schema name 要和 server.xml 对应上,既多个用户拥有对该逻辑库的权限。

<schema name="mydb">

city 设置分表三张,单库多表只能设置一个 datanoterule 采用取模模式 mod-long 取模分片。

<table name="lsqtable" primaryKey="id" autoIncrement="true" dataNode="dn$1-2" rule="mod-long" />

writeHostreadHost 设为同一数据库。

 

四:修改 rule.xml


MyCat 分片(分库分表)规则,mod-long 取模分片  取模列为 id 取模算法为 mod-long

<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">2</property>
</function>

此次选用默认的 mod-long 规则,只需修改 count 数.

修改 property count 等于 2

这样,配置已经完成。

 

五:修改 MySQL 数据库


先在 MySQL 库上,建 2 张表,lsqtable 。


                                


启动 Mycat

启动:
./mycat start


查看启动状态:
./mycat status


停止:
./mycat stop


重启(改变上面的 xml 配置不用重启,管理端可以重新载入):
./mycat restart


查看 logs/ 下的 wrapper.log 和 mycat.log 可以查看运行时问题和异常。
mycat 启动日志:
cat ./logs/wrapper.log

mycat 应用日志:
cat ./logs/mycat.log

 

六:测试


mysql 创建 mydb 数据库,两个数据源分别创建 lsqtable

连接 mycat, 端口:8066,账号:lsq, 密码:123456                // 对应 server 表中的 user 标签

执行 sql 语句,查看执行过程。

 

EXPLAIN

insert into lsqtable(id, l, s, q) VALUES (1, 'l1', 's1', 'q1')

可以分析 update 语句,或者 select 语句,可知偶数的 id 都被路由到了第一个库,奇数的 id 都被路由到了第二个库,因为 datanode1 作为第一个节点 0,datanode2 作为第二个节点 1。使用除留余数法,偶数的余数都为 0,而奇数的余数都为 1。打开 mysql 中的 mydb 数据库 lsqtable 表可看到数据:



可查看执行过程路由到物理表 dn1 库所在表上:

explain SELECT * FROM lsqtable WHERE id = 3

datanode    sql
dn2         SELECT * FROM lsqtable WHERE id = 3

3 % 2 = 1 会路由到 1 的节点。dn2 xml 配置中属于 1 的节点。从 0 开始

 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值