【MySQL】②MyCAT三大配置文件详解

本文目录

本文目录

本文导读

一、schema.xml 详解

1、schema 标签

2、dataNode 标签

3、dataHost 标签

二、server.xml 详解

三、rule.xml 详解

总结


本文导读

本文为MySQL专栏MyCat系列第二篇,上一篇:MyCAT基础概念、功能及适用场景、下一篇:MyCat分片规则配置与详解

本文详解MyCAT主要配置文件schema.xml、server.xml、rule.xml的标签和属性,通过MyCAT实战实现数据库的分库分表及分片扩展。

一、schema.xml 详解

schema.xml  是 MyCat 中的配置文件之一,涵盖了MyCat的逻辑库、表、分片规则、分片节点和数据源的配置。

schema.xml  主要包含以下三组标签:

<schema>标签,配置逻辑表信息。

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

<dataNode>标签,配置节点相关信息。

name,唯一ID,供上层标签使用;maxon/ min Con,最大连接数/最小连接数;balance,负载均衡策略配置0、1、2、3;writeτype,写操作分配方法;dbDriver,数据库驱动,支持 native、jdbc。

<dataHost>标签,配置节点的特定映射数据源的信息。

1、schema 标签

<schema>标签,用于定义 MyCat 实例中的逻辑库。MyCat实例中可以有多个逻辑库。

不同的逻辑库可以通过模式标记进行划分,MyCat中的逻辑库概念相当于MySQL中的数据库概念。


  
  
  1. <mycat:schema xmlns:mycat="http://io.mycat/">
  2. <!-- 逻辑库 -->
  3. <schema name="DB01" checkSQLschema="true" sqlMaxLimit="100">
  4. <!-- 逻辑表的名字, 逻辑表下的节点,逻辑表数据存入节点的规则 -->
  5. <table name="TB_ORDER" dataNode="dn1,dn2,dn3" rule="auto-sharding-long"/>
  6. </schema>
  7. </mycat:schema>

2、dataNode 标签

<dataNode>标签,定义MyCat中的数据节点,通常称为数据分片,dataNode标记是一个独立的数据分区。

name,数据节点的名称    需要唯一 ; 在table标签中会引用这个名字, 标识表与分片的对应关系

dataHost,数据库实例主机名称    引用自 <dataHost> 标签中name属性

database,定义分片所属的数据库    


  
  
  1. <mycat:schema xmlns:mycat="http://io.mycat/">
  2. <!-- 节点名称,节点关联的物理主机位置,关联数据库名称 -->
  3. <dataNode name="dn1" dataHost="dhost1" database="db01"/>
  4. <dataNode name="dn2" dataHost="dhost2" database="db01"/>
  5. <dataNode name="dn3" dataHost="dhost3" database="db01"/>
  6. </mycat:schema>

3、dataHost 标签

<dataHost>标签,在MyCat逻辑库中作为底层标签存在, 直接定义了具体的数据库实例、读写分离、心跳语句。


  
  
  1. <mycat:schema xmlns:mycat="http://io.mycat/">
  2. <!-- 节点名称,节点关联的物理主机位置,关联数据库名称 -->
  3. <dataNode name="dn1" dataHost="dhost1" database="db01"/>
  4. <!-- 与节点dataHost保持一致,最大连接、最小连接、负载均衡策略 -->
  5. <dataHost name="dhost1" maxCon="1000" minCon="10" balance="0" writeType="0" dbType="mysql" dbDriver="jdbc" switchType="1" slaveThreshold="100">
  6. <!-- 心跳需要改为jdbc -->
  7. <heartbeat>select user() </heartbeat>
  8. <!-- 如果不是集群的话,可以都写master,注意每个物理库地址和账号密码需要更改 -->
  9. <writeHost host="master" url="jdbc:mysql://192.168.95.xxx:3306?useSSL=false&amp;serverTimezone=Asia/Shanghai&amp;characterEncoding=utf8"
  10. user= "root" password= "***">
  11. </writeHost>
  12. </dataHost>
  13. </mycat:schema>

二、server.xml 详解

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

<system>标签,为配置的系统参数

<firewall>标签,用来定义防火墙;firewall下whitehost标签用来定义 IP白名单 ,blacklist用来定义 SQL黑名单。

<user>标签,主要用于定义登录MyCat的用户和权限,声明用户名、指定该用户名访问MyCat的密码等等操作。


  
  
  1. <mycat:server xmlns:mycat="http://io.mycat/">
  2. <system>
  3. <property name="nonePasswordLogin">0 </property> <!-- 0为需要密码登陆、1为不需要密码登陆 ,默认为0,设置为1则需要指定默认账户-->
  4. <property name="useHandshakeV10">1 </property>
  5. <property name="useSqlStat">0 </property> <!-- 1为开启实时统计、0为关闭 -->
  6. <property name="useGlobleTableCheck">0 </property> <!-- 1为开启全加班一致性检测、0为关闭 -->
  7. <property name="sqlExecuteTimeout">300 </property> <!-- SQL 执行超时 单位:秒-->
  8. <property name="sequnceHandlerType">2 </property>
  9. <!--必须带有MYCATSEQ_或者 mycatseq_进入序列匹配流程 注意MYCATSEQ_有空格的情况-->
  10. <property name="sequnceHandlerPattern">(?:(\s*next\s+value\s+for\s*MYCATSEQ_(\w+))(,|\)|\s)*)+ </property>
  11. <!-- 子查询中存在关联查询的情况下,检查关联字段中是否有分片字段 .默认 false -->
  12. <property name="subqueryRelationshipCheck">false </property>
  13. <!--默认为type 0: DirectByteBufferPool | type 1 ByteBufferArena | type 2 NettyBufferPool -->
  14. <property name="processorBufferPoolType">0 </property>
  15. <!--默认是65535 64K 用于sql解析时最大文本长度 -->
  16. <property name="maxStringLiteralLength">65535 </property>
  17. <!--分布式事务开关,0为不过滤分布式事务,1为过滤分布式事务(如果分布式事务内只涉及全局表,则不过滤),2为不过滤分布式事务,但是记录分布式事务日志-->
  18. <property name="handleDistributedTransactions">0 </property>
  19. <!-- off heap for merge/order/group/limit 1开启 0关闭 -->
  20. <property name="useOffHeapForMerge">0 </property>
  21. <!-- 单位为m-->
  22. <property name="memoryPageSize">64k </property>
  23. <!--单位为k-->
  24. <property name="spillsFileBufferSize">1k </property>
  25. <property name="useStreamOutput">0 </property>
  26. <!--单位为m-->
  27. <property name="systemReserveMemorySize">384m </property>
  28. <!--是否采用zookeeper协调切换 -->
  29. <property name="useZKSwitch">false </property>
  30. <!--如果为 true的话 严格遵守隔离级别,不会在仅仅只有select语句的时候在事务中切换连接-->
  31. <property name="strictTxIsolation">false </property>
  32. <property name="useZKSwitch">true </property>
  33. </system>
  34. <!--这些配置情况下对于127.0.0.1都能以root账户登录-->
  35. <firewall>
  36. <whitehost>
  37. <host host="1*7.0.0.*" user="root"/>
  38. </whitehost>
  39. <blacklist check="false">
  40. </blacklist>
  41. </firewall>
  42. <user name="user">
  43. <property name="password">*** </property>
  44. <property name="schemas">DB01 </property>
  45. <property name="readOnly">true </property>
  46. </user>
  47. </mycat:server>

三、rule.xml 详解

rule.xml文件,设置我们定义的分片规则,分片规则决定了逻辑表中的数据以何种方式落到不同的数据库中 。

规则需要在 schema.xml 中进行配置,需要对照着 rule.xml 中的规则方式进行设置。

这些规则引用了外部具体的文件,作为规则的具体配置,以默认规则举例,我们在使用过程中可以灵活的使用分片算法,或者对同一个分片算法使用不同的参数,它让分片过程可配置化。


  
  
  1. <!-- 默认的规则,根据id进行分片 -->
  2. <tableRule name="auto-sharding-long">
  3. <rule>
  4. <columns>id </columns>
  5. <!-- 具体的计算方式在rang-long中 这是一个引用 具体的路径在 autopartition-long.txt -->
  6. <algorithm>rang-long </algorithm>
  7. </rule>
  8. </tableRule>

总结

详解MyCAT主要配置文件schema.xml、server.xml、rule.xml的标签和属性,通过MyCAT实战实现数据库的分库分表及分片扩展。

文章知识点与官方知识档案匹配,可进一步学习相关知识
Java技能树首页概览 120518 人正在系统学习中
      <div class="blog_extension_card_cont">
        <span class="text">技术交流 | 粉丝福利 | 面试辅导</span>
        <div class="blog_extension_card_cont_r">
          <img class="weixin" src="https://g.csdnimg.cn/extension-box/1.1.6/image/weixin.png" alt="">
          <span>微信名片</span>
        </div>
      </div>
      <img class="blog_extension_card_right" src="https://g.csdnimg.cn/extension-box/1.1.6/image/ic_move.png" alt="">
    </div></div></div>
</article>
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值