• Mycat配置文件详解


    目录

    schema.xml详解

    server.xml详解

    rule.xml详解


    schema.xml详解

    schema.xmL作为 Mycal中最重要的配置文件之一,涵盖了 Mycat的逻辑库、逻辑表、分片规则、分片节点及数据源的配置。

    主要包含一下三组标签

    schema标签 配置逻辑表的信息

    • name:定义逻辑表表名,在该逻辑库下唯一
    • datanode:定义逻辑表所属的 datanode,该属性需要与 datanode标签中name对应;多个 datanode逗号分隔
    • rule:分片规则的名字,分片规则名字是在rue.xml中定义的
    • primarykey:逻辑表对应真实表的主键
    • type:逻辑表的类型,目前逻辑表只有全局表和普通表,如果未配置,就是普通表;全局表,配置为 global

    datanode标签 配置节点相关信息

    • name:唯一标识,供上层标签使用
    • maxon/ min Con:最大连接数/最小连接数
    • balance:负载均衡策略,取值0,1,23
    • writeτype:写操作分发方式(0:写操作转发到第一个 writehost,第一个挂了,切换到第二个;1:写操作随机分发到配置的 writehost
    • dbDrⅳver:数据库驱动,支持 native、jdbc

    datahost标签 配置节点具体映射数据源的信息

     schema核心属性

    • name:指定自定义的逻辑库库名
    • checksqlschema:在SQL语句操作时指定了数据库名称,执行时是否自动去除;true:自动去除, false:不自动去除【如果我们有多个schema或者一个schema 我们不指定逻辑库 直接通过命令去查表 那么会报错 例如:select*from TB_ORDER; 正确命令:select*from DB01.TB_ORDER;此时我们就需要在真正执行时让Mycat去掉DB01.否则也会报错
    • sqlmaxlimit:如果未指定 Limit进行查询,最多能查询出多少数据

     例如:

    1. "1.0"?>
    2. mycat:schema SYSTEM "schema.dtd">
    3. <mycat:schema xmlns:mycat="http://io.mycat/">
    4. <schema name="DB01" checkSQLschema="true" sqlMaxLimit="100">
    5. <table name="TB_ORDER" dataNode="dn1,dn2,dn3" rule="auto-sharding-long" />
    6. schema>
    7. <dataNode name="dn1" dataHost="dhost1" database="db01" />
    8. <dataNode name="dn2" dataHost="dhost2" database="db01" />
    9. <dataNode name="dn3" dataHost="dhost3" database="db01" />
    10. <dataHost name="dhost1" maxCon="1000" minCon="10" balance="0"
    11. writeType="0" dbType="mysql" dbDriver="jdbc" switchType="1" slaveThreshold="100">
    12. <heartbeat>select user()heartbeat>
    13. <writeHost host="master" url="jdbc:mysql://192.168.95.xxx:3306?useSSL=false&serverTimezone=Asia/Shanghai&characterEncoding=utf8" user="root"
    14. password="1234">
    15. writeHost>
    16. dataHost>
    17. <dataHost name="dhost2" maxCon="1000" minCon="10" balance="0"
    18. writeType="0" dbType="mysql" dbDriver="jdbc" switchType="1" slaveThreshold="100">
    19. <heartbeat>select user()heartbeat>
    20. <writeHost host="master" url="jdbc:mysql://192.168.96.xxx:3306?useSSL=false&serverTimezone=Asia/Shanghai&characterEncoding=utf8" user="root"
    21. password="1234">
    22. writeHost>
    23. dataHost>
    24. <dataHost name="dhost3" maxCon="1000" minCon="10" balance="0"
    25. writeType="0" dbType="mysql" dbDriver="jdbc" switchType="1" slaveThreshold="100">
    26. <heartbeat>select user()heartbeat>
    27. <writeHost host="master" url="jdbc:mysql://192.168.97.xxx:3306?useSSL=false&serverTimezone=Asia/Shanghai&characterEncoding=utf8" user="root"
    28. password="1234">
    29. writeHost>
    30. dataHost>
    31. mycat:schema>

    server.xml详解

    server.xml主要是配置我们连接时的权限过滤设置,例如我们可以在这里设置读写权限,用户登录验证,访问数据库的权限等等

    1. "1.0" encoding="UTF-8"?>
    2. mycat:server SYSTEM "server.dtd">
    3. <mycat:server xmlns:mycat="http://io.mycat/">
    4. <system>
    5. <property name="nonePasswordLogin">0property>
    6. <property name="useHandshakeV10">1property>
    7. <property name="useSqlStat">0property>
    8. <property name="useGlobleTableCheck">0property>
    9. <property name="sqlExecuteTimeout">300property>
    10. <property name="sequnceHandlerType">2property>
    11. <property name="sequnceHandlerPattern">(?:(\s*next\s+value\s+for\s*MYCATSEQ_(\w+))(,|\)|\s)*)+property>
    12. <property name="subqueryRelationshipCheck">falseproperty>
    13. <property name="processorBufferPoolType">0property>
    14. <property name="handleDistributedTransactions">0property>
    15. <property name="useOffHeapForMerge">0property>
    16. <property name="memoryPageSize">64kproperty>
    17. <property name="spillsFileBufferSize">1kproperty>
    18. <property name="useStreamOutput">0property>
    19. <property name="systemReserveMemorySize">384mproperty>
    20. <property name="useZKSwitch">falseproperty>
    21. <property name="strictTxIsolation">falseproperty>
    22. <property name="useZKSwitch">trueproperty>
    23. system>
    24. <user name="root" defaultAccount="true">
    25. <property name="password">123456property>
    26. <property name="schemas">DB01property>
    27. user>
    28. <user name="user">
    29. <property name="password">123456property>
    30. <property name="schemas">DB01property>
    31. <property name="readOnly">trueproperty>
    32. user>
    33. mycat:server>

    rule.xml详解

    这个文件主要是设置我们的分片规则的,分片规则决定了逻辑表中的数据以何种方式落到不同的数据库中  规则需要在schema.xml中进行配置,需要对照着rule.xml中的规则方式进行设置。并且这些规则引用了外部具体的文件,作为规则的具体配置。以默认规则举例。

    1.     <tableRule name="auto-sharding-long">
    2.         <rule>
    3.             <columns>idcolumns>
    4.             <algorithm>rang-longalgorithm>
    5.         rule>
    6.     tableRule>

     创建实际库与Mycat逻辑库的数据库与表结构

    • 运行Mycat可以看到这些逻辑表都已经存在了【如果使用NaviCat查看的话是看不到的】我们需要将实际的数据表进行创建

    在Mycat中执行创建库与表的操作后,对应节点主机上也会相应的创建出一模一样的数据库。

    此时 我们就可以根据我们不同的业务需求,通过逻辑库操作具体的数据库节点了。

    Mycat也是我们常用的读写分离,分库分表,多租户的解决方案。

  • 相关阅读:
    【.NET 深呼吸】全代码编写WPF程序
    FinClip小程序+Rust(三):一个加密钱包
    【客观赋权法1】熵权法(MATLAB全代码)
    MacOs基于docker搭建linux内核编译与调试环境
    Docker在Centos7下的安装
    鸿蒙开发从hello world开始
    Linux之LNMP在线安装
    keil下载及安装(社区版本)
    Redis常用知识笔记(超全面!超详细!)收藏这一篇就够了
    数据结构之二叉树
  • 原文地址:https://blog.csdn.net/weixin_44693109/article/details/127040417