mycat使用详解

发布时间 2023-08-12 18:29:23作者: yifanSJ

1. server.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mycat:server SYSTEM "server.dtd">
<mycat:server
    xmlns:mycat="http://io.mycat/">
    <system>
        <!-- 1为开启实时统计、0为关闭 -->
        <property name="useSqlStat">0</property>
        <!-- 1为开启全局一致性检测、0为关闭 -->
        <property name="useGlobleTableCheck">0</property>
        <!-- 0 表示是表示使用本地文件方式。1 表示的是根据数据库来生成。2 表示时间戳的方式 ID= 64 位二进制 (42(毫秒)+5(机器 ID)+5(业务编码)+12(重复累加) -->
        <property name="sequnceHandlerType">2</property>
        <!--默认为type 0: DirectByteBufferPool | type 1 ByteBufferArena | type 2 NettyBufferPool -->
        <property name="processorBufferPoolType">0</property>
        <!--分布式事务开关,0为不过滤分布式事务,1为过滤分布式事务(如果分布式事务内只涉及全局表,则不过滤),2为不过滤分布式事务,但是记录分布式事务日志-->
        <property name="handleDistributedTransactions">0</property>
        <!--off heap for merge/order/group/limit      1开启   0关闭-->
        <property name="useOffHeapForMerge">1</property>
        <!--单位为m-->
        <property name="memoryPageSize">1m</property>
        <!--单位为k-->
        <property name="spillsFileBufferSize">1k</property>
        <property name="useStreamOutput">0</property>
        <!-- 单位为m -->
        <property name="systemReserveMemorySize">384m</property>
        <!--是否采用zookeeper协调切换  -->
        <property name="useZKSwitch">true</property>
    </system>
    <!-- 连接MyCat库的用户名和密码 -->
    <user name="root">
        <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>
</mycat:server>

2. schema.xml

<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema
    xmlns:mycat="http://io.mycat/">
    <!-- name:逻辑数据库名 checkSQLschema:把schema的字符去掉 sqlMaxLimit:减少过多的数据返回-->
    <schema name="ball" checkSQLschema="false" sqlMaxLimit="100">
        <!-- name:逻辑表表名 primaryKey:逻辑表对应真实表的主键 autoIncrement:主键自增长 dataNode:逻辑表所属的dataNode rule:逻辑表使用的规则名字 -->
        <table name="db_trading" primaryKey="id" autoIncrement="true" subTables="db_trading$1-15" dataNode="dn1" rule="mod-long"/>
    </schema>
    <!-- name:数据节点名 dataHost:该分片属于哪个数据库实例 database:定义该分片属性哪个具体数据库实例上的具体库 -->
    <dataNode name="dn1" dataHost="localhost1" database="ball" />
    <!-- name:数据库实例名 -->
    <dataHost name="localhost1" maxCon="1000" minCon="10" balance="0" writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
        <heartbeat>select user()</heartbeat>
        <!-- 写实例 -->
        <writeHost host="hostM1" url="192.168.52.10:3306" user="root" password="Yifan123.">
            <!-- 读实例 -->
            <readHost host="hostS2" url="192.168.52.10:3306" user="root" password="Yifan123." />
        </writeHost>
    </dataHost>
</mycat:schema>

3. rule.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mycat:rule SYSTEM "rule.dtd">
<mycat:rule
    xmlns:mycat="http://io.mycat/">
    <!-- name:定义表规则名 -->
    <tableRule name="mod-long">
        <rule>
            <!-- 指定对物理表中的哪一列进行拆分 -->
            <columns>id</columns>
            <!-- 使用什么路由算法 -->
            <algorithm>mod-long</algorithm>
        </rule>
    </tableRule>
    <!-- name 指定算法的名字 class 制定路由算法具体的类名字 -->
    <function name="mod-long" class="io.mycat.route.function.PartitionByMod">
        <!-- property 为具体算法需要用到的一些属性。 -->
        <property name="count">3</property>
    </function>
</mycat:rule>