专栏首页Java患者一切都要从MyCat的配置说起

一切都要从MyCat的配置说起

安装目录

我们首先要关注conf里面的配置文件

而配置文件我们需要了解的是

  • server.xml : MyCat服务器参数调整和用户授权的配置文件
  • schema.xml : 逻辑库定义和表以及分片定义的配置文件
  • rule.xml : 分片规则的配置文件,修改该配置文件需要重启MyCat

从server.xml开始了解配置的内容:

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE mycat:server SYSTEM "server.dtd">
<mycat:server xmlns:mycat="http://io.mycat/">
      <system>
        <property name="nonePasswordLogin">0</property> 
        <property name="useHandshakeV10">1</property>
        <property name="useSqlStat">0</property>  
        <property name="useGlobleTableCheck">0</property>  

        <property name="sequnceHandlerType">2</property>
        <property name="sequnceHandlerPattern">(?:(\s*next\s+value\s+for\s*MYCATSEQ_(\w+))(,|\)|\s)*)+</property>
    <property name="subqueryRelationshipCheck">false</property> 


        <property name="processorBufferPoolType">0</property>

        <property name="handleDistributedTransactions">0</property>


        <property name="useOffHeapForMerge">0</property>


        <property name="memoryPageSize">64k</property>


        <property name="spillsFileBufferSize">1k</property>

        <property name="useStreamOutput">0</property>


        <property name="systemReserveMemorySize">384m</property>


        <property name="useZKSwitch">false</property>


        <property name="strictTxIsolation">false</property>

        <property name="useZKSwitch">true</property>

    </system>



    <user name="root" defaultAccount="true">
        <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>

system标签,该标签内嵌套的property标签都是系统配置的属性。

我们主要关注user标签,该标签用于定义登陆mycat的时候的用户和权限

<user name="user">
    <property name="password">user</property>

定义了一个用户为user,密码为user

<property name="schemas">TESTDB1,TESTDB2,TESTDB3</property>

schemas定义的则是逻辑库的名称,如果有多个逻辑库可以用逗号隔开

接着了解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">
        <table name="travelrecord" dataNode="dn1,dn2,dn3" rule="auto-sharding-long" />

        <table name="company" primaryKey="ID" type="global" dataNode="dn1,dn2,dn3" />

    </schema>
    <dataNode name="dn1" dataHost="localhost1" database="db1" />
    <dataNode name="dn2" dataHost="localhost1" database="db2" />
    <dataNode name="dn3" dataHost="localhost1" database="db3" />
    <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="localhost:3306" user="root"
                   password="123456">
            <readHost host="hostS2" url="192.168.1.200:3306" user="root" password="xxx" />
        </writeHost>
        <writeHost host="hostS1" url="localhost:3316" user="root"
                   password="123456" />
    </dataHost>

</mycat:schema>
  • schema标签

用于定义逻辑库,name属性定义逻辑库的名字,sqlMaxLimit定义限制返回结果集的行数,如果-1表示关闭limit限制。

  • table标签

定义逻辑表,name定义逻辑表的名字,primaryKey定义逻辑表的主键,dataNode定义了表数据所存储的数据节点,rule定义了逻辑表分片规则,对应的是rule.xml中的

  • dataNode

定义逻辑表存储的物理数据库,name定义数据节点的名称,唯一,dataHost属性定义分派你所在的物理主机,database定义物理数据库名。

  • dataHost

定义后端数据库主机信息,name定义了一组数据库服务器的名称,在配置文件中必须唯一,

maxCon定义mycat连接mysql的最大连接数,balance定义mycat读写分离、负载均衡的工作方式,如果为0则是不开启读写分离机制。

dbType代表使用的数据库类型(比如mysql,mongoDB等)

dbDriver代表所使用的数据库驱动

switchType代表写数据库如何进行高可用的切换,如果为1代表当每一个writeHost不可访问的时候都会切换到第二个writeHost写服务器。

最后我们了解下rule.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mycat:rule SYSTEM "rule.dtd">
<mycat:rule xmlns:mycat="http://io.mycat/">
    <tableRule name="rule1">
        <rule>
            <columns>id</columns>
            <algorithm>func1</algorithm>
        </rule>
    </tableRule>



    <function name="func1" class="io.mycat.route.function.PartitionByLong">
        <property name="partitionCount">8</property>
        <property name="partitionLength">128</property>
    </function>

</mycat:rule>

rule.xml 主要就两个标签

  • tableRule

定义了配置表的分片规则,name分片规则名字,唯一。columns 定义了分片列,必须是表中存在的列,mycat根据这个列计算却低估当前数据要存放在哪个分片。algorithm指定表的分片算法,这里跟function的name属性。

  • function

定义配置表的分片算法,name定义了算法的名称,唯一。class属性是指实现分片算法的java类的全名。count代表分片节点数的总和。

本文分享自微信公众号 - Java患者(gh_3a16ffdedb6a),作者:Zero

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-05-16

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Restful API详解

    Restful API是一种网络应用程序的设计风格和开发方式,基于HTTP,可以使用XML格式定义或JSON格式定义,它使用URL定位资源,用H...

    用户7386338
  • Java面试锦囊(十二)-- Eureka与Zookeeper区别

    大多数的分布式系统都分布在多个服务器下的子网络。每个子网络就叫做一个区(partition)。

    用户7386338
  • 你连volatile都不在意,你在意什么,在意大利吗

    当我们执行这段代码的时候,我们的预期是1秒之后会执行 "stop 变为 true",但是我们的输出结果一直是"stop 修改为true", 既然修改为了true...

    用户7386338
  • Hive远程模式安装

        Hadoop的安装略,JDK的安装略。安装在192.168.33.33这台机器上。

    克虏伯
  • 【Oozie】Oozie企业级案例分析及实现

    版权声明:本文为博主原创文章,转载请注明出处。 https://blog.csdn.net/...

    魏晓蕾
  • 今天研究了一下手机通信录管理系统(C语言)

    题目:手机通信录管理系统 一、题目要求 二、需求分析 三、设计步骤/编写代码 四、上机/运行结果 五、总结 一、题目要求 模拟手机通信录管理系统,实现对手机中...

    互联网金融打杂
  • Appium系列|Appium测试框架完善(一)

    这个章节我们主要回来介绍下测试脚本批量执行,在实际项目过程中我们有可能需要指定测试脚本的执行顺序以及执行哪些测试脚本,这里我们会借助TestNG的suite来完...

    测试邦
  • Spring 中的 18 个注解,你会几个?

    标识一个该类是 Spring MVC controller 处理器,用来创建处理 http 请求的对象。

    良月柒
  • python变量、语句

    mwangblog
  • R语言相关性分析简单小例子

    http://www.sthda.com/english/wiki/correlation-matrix-a-quick-start-guide-to-anal...

    用户7010445

扫码关注云+社区

领取腾讯云代金券