vlambda博客
学习文章列表

Mycat 配置文件概述

1.server.xml

作用:

  • 配置mycat系统性参数 (<system> 标签)

  • 配置用户以及访问权限 (<user> 标签)

  • 配置sql防火墙以及sql拦截功能

常用完整属性配,常用的mysql系统的完整配置

    <system> 
<property name="serverPort">8066</property>
<!-- mycat 管理端口 -->
<property name="managerPort">9066</property>
<!-- 0为需要密码登陆、1为不需要密码登陆 ,默认为0,设置为1则需要指定默认账户-->
<property name="nonePasswordLogin">0</property>
<property name="bindIp">0.0.0.0</property>
<!--写队列大小-->
<property name="frontWriteQueueSize">4096</property>
<property name="charset">utf8</property>

<!--事务隔离级别 3-可重复读-->
<property name="txIsolation">3</property>

<!--mycat线程数量-->
<property name="processors">8</property>
<!--线程空闲多长时间断开 毫秒-->
<property name="idleTimeout">1800000</property>
<!---->
<property name="sqlExecuteTimeout">300</property>
<!-- 1为开启实时统计、0为关闭 -->
<property name="useSqlStat">0</property>
<!-- 1为开启全加班一致性检测、0为关闭 -->
<property name="useGlobleTableCheck">0</property>
<property name="sequnceHandlerType">2</property>
<!--默认参数-->
<property name="defaultMaxLimit">100</property>
<!--mysql中包的大小-->
<property name="maxPacketSize">104857600</property>
</system>

<user name="root" defaultAccount="true">
<property name="password">123456</property>
<property name="schemas">TESTDB,TESTDB2,TESTDB3</property>

<!-- 表级 DML 权限设置 -->
<!--
<privileges check="false">
<schema name="TESTDB" dml="0110" >
<table name="tb01" dml="0000"></table>
<table name="tb02" dml="1111"></table>
</schema>
</privileges>
-->

</user>

<user name="user">
<property name="password">user</property>
<property name="password">user</property>
<!--是否对明文进行加密-->
<property name="usingDecrypt">0</property>
<property name="schemas">TESTDB,TESTDB1,TESTDB2</property>
<!--是否是默认账号-->
<property name="readOnly">false</property>
<privileges check="false">
<schema name="TESTDB" dml="0110" >
<table name="tb01" dml="0000"></table>
<table name="tb02" dml="1111"></table>
</schema>
</privileges>
</user>
  • dml 总的数字代表:0110 -> insert,update,select,detele 0代表不具有此权限,1代表有次权限

  • 用户密码加密配置 java -cp Mycat-server-1.6.5-release.jar 0:root:123456 (0:前端加密标志 root:用户名 123456:密码)
    配置:对应的user标签 <property name="usingDecrypt">1</property>

2.rule.xml

作用
配置分片规则

分片表的配置规则

<tableRule name="hash-mod-2_id">
<rule>
<columns>id</columns>
<algorithm>hashmode2</algorithm>
<rule>
<tableRule>
  • columns 分片列

  • algorithm 分片算法

配置表的分片算法

    <function name="hash-mode-2" class="io.mycat.route.function.PartitionByHashMod">
<property name="count">2</property>
</function>
常用分片算法
  • 简单取模分片算法 PartitionByMod 
    场景:分片列是整型,使用这种取模算法 
     
    例子

<tableRule name="partition-mod-2-stuent_id">
<rule>
<columns>student_id</columns>
<algorithm>partition-mod-2</algorithm>
</rule>
</tableRule>
<function name="partition-mod-2" class="io.mycat.route.function.PartitionByMod">
<property name="count">2</property>
</function>
  • 哈希取模 PartitionByHashMod 场景:分片列适合所有类型
    注意:如果hash一致的过多,可能会使某个分片数据库数据过多。
    例子

<tableRule name="partition-hash-mod-2-stuent_id">
<rule>
<columns>student_id</columns>
<algorithm>partition-hash-mod-2</algorithm>
</rule>
</tableRule>
<function name="partition-hash-mod-2" class="io.mycat.route.function.PartitionByHashMod">
<property name="count">2</property>
</function>
  • 分片枚举算法 PartitionByFileMap
    场景: 根据有限个枚举类型进行分片

    <tableRule name="partition-enums-file-mod-2-school_id">
<rule>
<columns>school_id</columns>
<algorithm>hash-int</algorithm>
</rule>
</tableRule>
<function name="partition-enums-file-mod-2" class="io.mycat.route.functioin.PartitionByFileMap">
<property name="mapFile">partition-hash-int.txt</property>
<property name="type">0</property>
<property name="defaultNode">0</property>
</function>
  1. property name="type" 定义枚举值类型,0代表整数类型,非0表示字符串

  2. name="defaultNode" 是否使用默认节点,<0 : 不起用默认节点, >=0 表示启用默认节点

  3. 相应的配置文件,需要放在$MYCAT_HOME/conf 目录下

  4. 枚举值可以指定数据的存储位置

  • 字符串范围取模分片算法
    截取某个字符串的一部分,作为分片的依据
    算法:截取字符串的某一段,然后assic码相加,然后和取模基数进行取模计算。

    <function name="sharding-by-prefix-patter" class="io.mycat.route.function.PartitionByPrefixPattern">
<property name="patternValue">128</property> <!--配置的取模基数-->
<property name="prefixLength">2</property> <!--取前2两位-->
<property name="mapFile">prefix-partition-pattern.txt</property>
</function>
  1. prefix-partition-pattern.txt 记录了 对应的取模范围和后端节点的对应关系

  2. 可以根据指定字符串的前N个字符确定存储位置

3.schema.xml

用途
配置逻辑库和逻辑表
配置逻辑表所存储的数据节点
配置数据节点所对应的数据库服务器信息

  • 逻辑库的定义

    <schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="1000"></schema>
  1. sqlMaxLimit 当前逻辑库默认返回的最大行数 , -1 时表示不限制

  2. checkSQLschema 是否检查sql中含有库名称 ,true :检查并删除库名 , false :不检查

  • 逻辑表定义

    <table name="travelrecord" primeryKey="id" dataNode="dn1,dn2,dn3" rule="auto-sharding-long" />
  1. name 逻辑表名 (逻辑表必须对应着物理表)

  2. primeryKey 主键

  3. dataNode : 存储的实际的物理节点

  4. rule 引用分片规则

  • dataNode 标签

   	<dataNode name="dn1" dataHost="localhost1" database="db1" />
  1. name : 定义dataNode 的值

  2. database 物理数据库的名称

  • dataHost 标签

  	<dataHost name="localhost1" maxCon="1000" minCon="10" balance="0"
writeType="0" dbType="mysql" dbDriver="native" switchType="1">

<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>

dataHost属性

  1. name 组服务器名称,dataNode 标签引用的依据,mycat中唯一

  2. maxCon , minCon 定义 最大连接数 ,最小连接数

  3. banlance 工作方式,取值

    • balance="0", 不开启读写分离机制,所有读操作都发送到当前可用的 writeHost 上。

    • balance="1",全部的 readHost 与 stand by writeHost 参与 select 语句的负载均衡,简单的说,当双 主双从模式(M1->S1,M2->S2,并且 M1 与 M2 互为主备),正常情况下,M2,S1,S2 都参与 select 语句的负载 均衡。

    • balance="2",所有读操作都随机的在 writeHost、readhost 上分发。

    • balance="3",所有读请求随机的分发到 wiriterHost 对应的 readhost 执行,writerHost 不负担读压力, 注意 balance=3 只在 1.4 及其以后版本有,1.3 没有。

  4. writeType 负载均衡类型

    • writeType="0", 所有写操作发送到配置的第一个 writeHost,第一个挂了切到还生存的第二个 writeHost, 重新启动后已切换后的为准,切换记录在配置文件中:dnindex.properties .

    • writeType="1",所有写操作都随机的发送到配置的 writeHost,1.5 以后废弃不推荐。

  5. switchType 是否自动切换写数据库

    • -1 表示不自动切换。

    • 1 默认值,自动切换。

    • 2 基于 MySQL 主从同步的状态决定是否切换。

  6. heartbeat 标签,检测心跳

  7. writeHost 标签,指定写实例

  8. readHost 标签,指定读实例

  • 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">
<!-- auto sharding by id (long) -->
<table name="travelrecord" dataNode="dn1,dn2,dn3" rule="auto-sharding-long" />
</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">

<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>