Mycat教程学习笔记

1.读写分离

2.原理

MyCat的原理中最重要的就是“拦截”,它拦截了用户发过来的SQL语句,首先对SQL语句进行一些特定的分析,如分片分析,路由分析,读写分离分析,缓存分析等,再将此SQL发往后端的真实数据库,并将返回的结果做适当的处理,最终再返回给用户,通过此种方式把数据库的分布式从代码中解耦出来。

3.垂直分库

修改schema.xml文件

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

        <schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1" >
                <table name="rider" dataNode="dn2"></table>
        </schema>
        <dataNode name="dn1" dataHost="localhost1" database="orders"/>
        <dataNode name="dn2" dataHost="localhost2" database="orders"/>
        <dataHost name="localhost1" 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="hostM1" url="192.168.5.129:3306" user="root"
                                   password="123456">
                </writeHost>
        </dataHost>
        <dataHost name="localhost2" 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="hostM1" url="192.168.5.130:3306" user="root" password="123456">
                </writeHost>
        </dataHost>

</mycat:schema>  

修改完schema.xml配置文件后,需要重启MyCat

#在/usr/local/MyCat/bin目录下
#两种启动方式(1.控制台启动 2.后台启动)
#1.控制台启动
./mycat console
#2.后台启动
./mycat start

启动后查看MyCat状态

./mycat status

再回到mycat中进行切库操作。

use TESTDB;

4.水平分表

修改schema.xml文件

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

        <schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1" >
                <table name="rider" dataNode="dn2"></table>
                <table name="fullrider" dataNode="dn1,dn2" rule="mod_rule">
                </table>
        </schema>
        <dataNode name="dn1" dataHost="localhost1" database="orders"/>
        <dataNode name="dn2" dataHost="localhost2" database="orders"/>
        <dataHost name="localhost1" 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="hostM1" url="192.168.5.129:3306" user="root"
                                   password="123456">
                </writeHost>
        </dataHost>
        <dataHost name="localhost2" 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="hostM1" url="192.168.5.130:3306" user="root"                                   password="123456">
                </writeHost>
        </dataHost>

</mycat:schema>

修改rule.xml

<tableRule name="mod_rule">
                <rule>
                        <columns>rider_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>

5.关联查询,分片join

修改schema.xml

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

        <schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1" >
                <table name="rider" dataNode="dn2"></table>
                <table name="fullrider" dataNode="dn1,dn2" rule="mod_rule">
                        <childtable name="oldtonew" primaryKey="id" joinKey="fullrider_id" parentKey="id"/>
                </table>
        </schema>
        <dataNode name="dn1" dataHost="localhost1" database="orders"/>
        <dataNode name="dn2" dataHost="localhost2" database="orders"/>
        <dataHost name="localhost1" 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="hostM1" url="192.168.5.129:3306" user="root"
                                   password="123456">
                </writeHost>
        </dataHost>
        <dataHost name="localhost2" 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="hostM1" url="192.168.5.130:3306" user="root"                                   password="123456">
                </writeHost>
        </dataHost>
</mycat:schema>

6.user标签权限控制

修改server.xml

<user name="mycat">
                <property name="password">123456</property>
                <property name="schemas">TESTDB</property>
</user>
<user name="user">
                <property name="password">user</property>
                <property name="schemas">TESTDB</property>
                <property name="readOnly">true</property>
</user>
标签属性说明
name应用连接中间件逻辑库的用户名
password该用户对应的密码
TESTDB应用当前连接的逻辑库中所对应的逻辑表,schemas中可以配置一个或多个
readOnly应用连接中间件逻辑库所具有的权限,true为只读,false为可读可写,默认为false

7.privileges标签权限控制

修改server.xml配置文件的privileges部分

在user标签下的privileges标签可以对逻辑库(schema)、表(table)进行精细化的DML权限控制

privileges标签下的check属性,如为true开启权限检查,为flase不开启,默认为false

<privileges check="false">
                        <schema name="TESTDB" dml="0110" >
                                <table name="tb01" dml="0000"></table>
                                <table name="tb02" dml="1111"></table>
                        </schema>
</privileges> 

DML 权限增加(insert)更新(update)查询(select)删除(select)
0000禁止禁止禁止禁止
0010禁止禁止允许禁止
1110允许允许允许禁止
1111允许允许允许允许
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值