本文目录
本文导读
本文为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中的数据库概念。
-
<mycat:schema xmlns:mycat="http://io.mycat/">
-
<!-- 逻辑库 -->
-
<schema name="DB01" checkSQLschema="true" sqlMaxLimit="100">
-
<!-- 逻辑表的名字, 逻辑表下的节点,逻辑表数据存入节点的规则 -->
-
<table name="TB_ORDER" dataNode="dn1,dn2,dn3" rule="auto-sharding-long"/>
-
</schema>
-
</mycat:schema>
2、dataNode 标签
<dataNode>标签,定义MyCat中的数据节点,通常称为数据分片,dataNode标记是一个独立的数据分区。
name,数据节点的名称 需要唯一 ; 在table标签中会引用这个名字, 标识表与分片的对应关系
dataHost,数据库实例主机名称 引用自 <dataHost> 标签中name属性
database,定义分片所属的数据库
-
<mycat:schema xmlns:mycat="http://io.mycat/">
-
<!-- 节点名称,节点关联的物理主机位置,关联数据库名称 -->
-
<dataNode name="dn1" dataHost="dhost1" database="db01"/>
-
<dataNode name="dn2" dataHost="dhost2" database="db01"/>
-
<dataNode name="dn3" dataHost="dhost3" database="db01"/>
-
</mycat:schema>
3、dataHost 标签
<dataHost>标签,在MyCat逻辑库中作为底层标签存在, 直接定义了具体的数据库实例、读写分离、心跳语句。
-
<mycat:schema xmlns:mycat="http://io.mycat/">
-
<!-- 节点名称,节点关联的物理主机位置,关联数据库名称 -->
-
<dataNode name="dn1" dataHost="dhost1" database="db01"/>
-
-
<!-- 与节点dataHost保持一致,最大连接、最小连接、负载均衡策略 -->
-
<dataHost name="dhost1" maxCon="1000" minCon="10" balance="0" writeType="0" dbType="mysql" dbDriver="jdbc" switchType="1" slaveThreshold="100">
-
<!-- 心跳需要改为jdbc -->
-
<heartbeat>select user()
</heartbeat>
-
<!-- 如果不是集群的话,可以都写master,注意每个物理库地址和账号密码需要更改 -->
-
<writeHost host="master" url="jdbc:mysql://192.168.95.xxx:3306?useSSL=false&serverTimezone=Asia/Shanghai&characterEncoding=utf8"
-
user=
"root"
password=
"***">
-
</writeHost>
-
</dataHost>
-
</mycat:schema>
二、server.xml 详解
server.xml,主要是配置我们连接时的权限过滤设置,例如我们可以在这里设置读写权限,用户登录验证,访问数据库的权限等等。
<system>标签,为配置的系统参数
<firewall>标签,用来定义防火墙;firewall下whitehost标签用来定义 IP白名单 ,blacklist用来定义 SQL黑名单。
<user>标签,主要用于定义登录MyCat的用户和权限,声明用户名、指定该用户名访问MyCat的密码等等操作。
-
<mycat:server xmlns:mycat="http://io.mycat/">
-
<system>
-
<property name="nonePasswordLogin">0
</property>
<!-- 0为需要密码登陆、1为不需要密码登陆 ,默认为0,设置为1则需要指定默认账户-->
-
<property name="useHandshakeV10">1
</property>
-
<property name="useSqlStat">0
</property>
<!-- 1为开启实时统计、0为关闭 -->
-
<property name="useGlobleTableCheck">0
</property>
<!-- 1为开启全加班一致性检测、0为关闭 -->
-
<property name="sqlExecuteTimeout">300
</property>
<!-- SQL 执行超时 单位:秒-->
-
<property name="sequnceHandlerType">2
</property>
-
<!--必须带有MYCATSEQ_或者 mycatseq_进入序列匹配流程 注意MYCATSEQ_有空格的情况-->
-
<property name="sequnceHandlerPattern">(?:(\s*next\s+value\s+for\s*MYCATSEQ_(\w+))(,|\)|\s)*)+
</property>
-
<!-- 子查询中存在关联查询的情况下,检查关联字段中是否有分片字段 .默认 false -->
-
<property name="subqueryRelationshipCheck">false
</property>
-
<!--默认为type 0: DirectByteBufferPool | type 1 ByteBufferArena | type 2 NettyBufferPool -->
-
<property name="processorBufferPoolType">0
</property>
-
<!--默认是65535 64K 用于sql解析时最大文本长度 -->
-
<property name="maxStringLiteralLength">65535
</property>
-
<!--分布式事务开关,0为不过滤分布式事务,1为过滤分布式事务(如果分布式事务内只涉及全局表,则不过滤),2为不过滤分布式事务,但是记录分布式事务日志-->
-
<property name="handleDistributedTransactions">0
</property>
-
<!-- off heap for merge/order/group/limit 1开启 0关闭 -->
-
<property name="useOffHeapForMerge">0
</property>
-
<!-- 单位为m-->
-
<property name="memoryPageSize">64k
</property>
-
<!--单位为k-->
-
<property name="spillsFileBufferSize">1k
</property>
-
<property name="useStreamOutput">0
</property>
-
<!--单位为m-->
-
<property name="systemReserveMemorySize">384m
</property>
-
<!--是否采用zookeeper协调切换 -->
-
<property name="useZKSwitch">false
</property>
-
<!--如果为 true的话 严格遵守隔离级别,不会在仅仅只有select语句的时候在事务中切换连接-->
-
<property name="strictTxIsolation">false
</property>
-
<property name="useZKSwitch">true
</property>
-
</system>
-
-
<!--这些配置情况下对于127.0.0.1都能以root账户登录-->
-
<firewall>
-
<whitehost>
-
<host host="1*7.0.0.*" user="root"/>
-
</whitehost>
-
<blacklist check="false">
-
</blacklist>
-
</firewall>
-
-
<user name="user">
-
<property name="password">***
</property>
-
<property name="schemas">DB01
</property>
-
<property name="readOnly">true
</property>
-
</user>
-
</mycat:server>
三、rule.xml 详解
rule.xml文件,设置我们定义的分片规则,分片规则决定了逻辑表中的数据以何种方式落到不同的数据库中 。
规则需要在 schema.xml 中进行配置,需要对照着 rule.xml 中的规则方式进行设置。
这些规则引用了外部具体的文件,作为规则的具体配置,以默认规则举例,我们在使用过程中可以灵活的使用分片算法,或者对同一个分片算法使用不同的参数,它让分片过程可配置化。
-
<!-- 默认的规则,根据id进行分片 -->
-
<tableRule name="auto-sharding-long">
-
<rule>
-
<columns>id
</columns>
-
<!-- 具体的计算方式在rang-long中 这是一个引用 具体的路径在 autopartition-long.txt -->
-
<algorithm>rang-long
</algorithm>
-
</rule>
-
</tableRule>
总结
详解MyCAT主要配置文件schema.xml、server.xml、rule.xml的标签和属性,通过MyCAT实战实现数据库的分库分表及分片扩展。
<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>