zoukankan      html  css  js  c++  java
  • Mycat的server.xml配置

    Mycat的配置文件,设置账号、参数等。
    server.xml 几乎保存了所有 mycat 需要的系统配置信息。其在代码内直接的映射类为 SystemConfig 类。

    <?xml version="1.0" encoding="UTF-8"?>
    <!-- - - Licensed under the Apache License, Version 2.0 (the "License"); 
            - you may not use this file except in compliance with the License. - You 
            may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 
            - - Unless required by applicable law or agreed to in writing, software - 
            distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT 
            WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the 
            License for the specific language governing permissions and - limitations 
            under the License. -->
    <!DOCTYPE mycat:server SYSTEM "server.dtd">
    <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="sequnceHandlerType">2</property>
            <property name="subqueryRelationshipCheck">false</property> <!-- 子查询中存在关联查询的情况下,检查关联字段中是否有分片字段 .默认 false -->
          <!--  <property name="useCompression">1</property>--> <!--1为开启mysql压缩协议-->
            <!--  <property name="fakeMySQLVersion">5.6.20</property>--> <!--设置模拟的MySQL版本号-->
            <!-- <property name="processorBufferChunk">40960</property> -->
            <!-- 
            <property name="processors">1</property> 
            <property name="processorExecutor">32</property> 
             -->
            <!--默认为type 0: DirectByteBufferPool | type 1 ByteBufferArena | type 2 NettyBufferPool -->
                    <property name="processorBufferPoolType">0</property>
                    <!--默认是65535 64K 用于sql解析时最大文本长度 -->
                    <!--<property name="maxStringLiteralLength">65535</property>-->
                    <!--<property name="sequnceHandlerType">0</property>-->
                    <!--<property name="backSocketNoDelay">1</property>-->
                    <!--<property name="frontSocketNoDelay">1</property>-->
                    <!--<property name="processorExecutor">16</property>-->
                    <!--
                            <property name="serverPort">8066</property> <property name="managerPort">9066</property> 
                            <property name="idleTimeout">300000</property> <property name="bindIp">0.0.0.0</property> 
                            <property name="frontWriteQueueSize">4096</property> <property name="processors">32</property> -->
                    <!--分布式事务开关,0为不过滤分布式事务,1为过滤分布式事务(如果分布式事务内只涉及全局表,则不过滤),2为不过滤分布式事务,但是记录分布式事务日志-->
                    <property name="handleDistributedTransactions">0</property>
    
                            <!--
                            off heap for merge/order/group/limit      1开启   0关闭
                    -->
                    <property name="useOffHeapForMerge">1</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>
    
                    <!-- XA Recovery Log日志路径 -->
                    <!--<property name="XARecoveryLogBaseDir">./</property>-->
    
                    <!-- XA Recovery Log日志名称 -->
                    <!--<property name="XARecoveryLogBaseName">tmlog</property>-->
                    <!--如果为 true的话 严格遵守隔离级别,不会在仅仅只有select语句的时候在事务中切换连接-->
                    <property name="strictTxIsolation">false</property>
    
                    <property name="useZKSwitch">true</property>
    
            </system>
    
            <!-- 全局SQL防火墙设置 -->
            <!--白名单可以使用通配符%或着*-->
            <!--例如<host host="127.0.0.*" user="root"/>-->
            <!--例如<host host="127.0.*" user="root"/>-->
            <!--例如<host host="127.*" user="root"/>-->
            <!--例如<host host="1*7.*" user="root"/>-->
            <!--这些配置情况下对于127.0.0.1都能以root账户登录-->
            <!--
            <firewall>
               <whitehost>
                  <host host="1*7.0.0.*" user="root"/>
               </whitehost>
           <blacklist check="false">
           </blacklist>
            </firewall>
            -->
    
            <user name="root" defaultAccount="true">
                    <property name="password">123456</property>
                    <property name="schemas">TESTDB</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="schemas">TESTDB</property>
                    <property name="readOnly">true</property>
            </user>
    
    </mycat:server>
    View Code

     一、<user>标签

    <user name="test">
        <property name="password">test</property>
        <property name="schemas">TESTDB</property>
        <property name="readOnly">true</property>
        <property name="benchmark">11111</property>
        <property name="usingDecrypt">1</property>
        <privileges check="false">
            <schema name="TESTDB" dml="0010" showTables="custome/mysql">
                <table name="tbl_user" dml="0110"></table>
                <table name="tbl_dynamic" dml="1111"></table>
            </schema>
        </privileges>
    </user>

    <user>标签主要用于定义登录 mycat 的用户和权限,如上面,定义了一个用户,用户名为 test、密码也为 test,可访问的 schema 也只有 TESTDB 一个。

    <property>标签则是具体声明的属性值:

    • user 用户配置节点
    • name 登录的用户名,也就是连接Mycat的用户名
    • password 登录的密码,也就是连接Mycat的密码
    • readOnly true/false,限制用户是否只是可读的
    • benchmark 连接服务降级处理基准值,当前端的整体 connection 数达到基准值是, 对来自该账户的请求开始拒绝连接,0 或不设表示不限制
    • usingDecrypt 是否对密码加密默认 0 否 如需要开启配置 1,同时使用加密程序对密码加密
    • schemas 数据库名,这里会和schema.xml中的配置关联,多个用逗号分开,例如需要这个用户需要管理两个数据库db1,db2,则配置db1,dbs
    • privileges 配置对用户的 schema 及下级的 table 进行精细化的 DML 权限控制,privileges 节点中的 check 属性是用于标识是否开启 DML 权限检查, 默认 false 标识不检查,当然 privileges 节点不配置,等同 check=false,由于 Mycat 一个用户的 schemas 属性可配置多个 schema ,所以 privileges 的下级节点 schema 节点同样可配置多个,对多库多表进行细粒度的 DML 权限控制。insert,update,select,delete 表示0000。如果设置了 schema , 但只设置了个别 table 或 未设置 table 的 DML,会自动继承 schema 的 DML 属性

    二、<system>标签

    这个标签内嵌套的所有 property 标签都与系统配置有关。

    1. charset 属性

    配置mycat的字符集

    <system> 
        <property name="charset">utf8</property>
    </system>

    如果需要配置 utf8mb2 等特殊字符集可以在index_to_charset.properties 配置:

    语法:配置数据库短的字符集 ID=字符集

    例如:224=utf8mb4

    配置字符集的时候一定要坚持 mycat 的字符集与数据库端的字符集是一致的,可以通过变量来查询:

    show variables like 'collation_%';
    show variables like 'character_set_%';

    2. defaultSqlParser 属性

    用来指定默认的解析器。
    1.6版本目前的可用的取值有:druidparser 和 fdbparser。使用的时候可以选择其中的一种,目前一般都使用 druidparser。

    <property name="defaultSqlParser ">druidparser</property>

    3. processors 属性

    用于指定系统可用的线程数,默认值为机器 CPU 核心线程数。
    主要影响 processorBufferPool、processorBufferLocalPercent、processorExecutor 属性。
    NIOProcessor 的个数也是由这个属性定义的,所以调优的时候可以适当的调高这个属性。

    <property name="processors">100</property>

    4. processorBufferChunk 属性

    指定每次分配 Socket Direct Buffer 的大小,默认是 4096 个字节。
    这个属性也影响 buffer pool 的长度。如果一次性获取的数过大 buffer 不够用 经常出现警告,则可以适当调大。

    <property name="processorBufferChunk ">6000</property>

    5. processorBufferPool 属性

    指定 bufferPool 计算 比例值。
    由于每次执行 NIO 读、写操作都需要使用到 buffer,系统初始化的时候会建立一定长度的 buffer 池来加快读、写的效率,减少建立 buffer 的时间。

    Mycat 中有两个主要的 buffer 池: BufferPool 和 ThreadLocalPool

    BufferPool 由 ThreadLocalPool 组合而成,每次从 BufferPool 中获取 buffer 都会优先获取ThreadLocalPool 中的 buffer,未命中之后才会去获取 BufferPool 中的 buffer。也就是说 ThreadLocalPool 是作为 BufferPool 的二级缓存,每个线程内部自己使用的。当然,这其中还有一些限制条件需要线程的名字是由$_开头。然而,BufferPool 上的 buffer 则是每个 NIOProcessor 都共享的。

    默认这个属性的值为: 默认 bufferChunkSize(4096) * processors 属性 * 1000
    BufferPool 的总长度 = bufferPool / bufferChunk。
    若 bufferPool 不是 bufferChunk 的整数倍,则总长度为前面计算得出的商 + 1

    6. processorBufferLocalPercent 属性

    这个属性就是用来控制分配ThreadLocalPool  的大小用的,但其也并不是一个准确的值,也是一个比例值。这个属性默认值为 100。

    7. processorExecutor 属性

    指定 NIOProcessor 上共享的 businessExecutor 固定线程池大小。mycat 在需要处理一些异步逻辑的时候会把任务提交到这个线程池中。新版本中这个连接池的使用频率不是很大了,可以设置一个较小的值。

    <property name="processorExecutor">10</property>

    8. sequnceHandlerType 属性

    指定使用 Mycat 全局序列的类型。0 为本地文件方式,1 为数据库方式,2 为时间戳序列方式,3 为分布式 ZK ID 生成器,4 为 zk 递增 id 生成。
    从 1.6 增加 两种 ZK 的全局 ID 生成算法。

    <property name="sequnceHandlerType ">1</property>

    9. Mysql 连接相关属性

    初始化 mysql 前后端连接所涉及到的一些属性:

    • packetHeaderSize : 指定 Mysql 协议中的报文头长度。默认 4。
    • maxPacketSize : 指定 Mysql 协议可以携带的数据最大长度。默认 16M。
    • idleTimeout : 指定连接的空闲超时时间。某连接在发起空闲检查下,发现距离上次使用超过了空闲时间,那么这个连接会被回收,就是被直接的关闭掉。默认 30 分钟,单位毫秒。
    • charset : 连接的初始化字符集。默认为 utf8。
    • txIsolation : 前端连接的初始化事务隔离级别,只在初始化的时候使用,后续会根据客户端传递过来的属性对后端数据库连接进行同步。默认为 REPEATED_READ,设置值为数字默认 3。
      • READ_UNCOMMITTED = 1;
      • READ_COMMITTED = 2;
      • REPEATED_READ = 3;
      • SERIALIZABLE = 4;
    • sqlExecuteTimeout:SQL 执行超时的时间,Mycat 会检查连接上最后一次执行 SQL 的时间,若超过这个时间则会直接关闭这连接。默认时间为 300 秒,单位秒。

    10. 心跳属性

    mycat 中有几个周期性的任务来异步的处理一些我需要的工作。这些属性就在系统调优的过程中也是比不可少的。

    • processorCheckPeriod : 清理 NIOProcessor 上前后端空闲、超时和关闭连接的间隔时间。默认是 1 秒,单位毫秒。。
    • dataNodeIdleCheckPeriod : 对后端连接进行空闲、超时检查的时间间隔,默认是 300 秒,单位毫秒。
    • dataNodeHeartbeatPeriod : 对后端所有读、写库发起心跳的间隔时间,默认是 10 秒,单位毫秒。

    11. 服务相关属性

    主要会影响外部系统对 mycat 的感知。

    • bindIp : mycat 服务监听的 IP 地址,默认值为 0.0.0.0。
    • serverPort : 定义 mycat 的使用端口,默认值为 8066, 这也连接mycat的端口。
    • managerPort : 定义 mycat 的管理端口,默认值为 9066。这也是连接mycat管理地址的端口。

    12. fakeMySQLVersion

    mycat 模拟的 mysql 版本号,默认值为 5.6 版本,如非特需,不要修改这个值,目前支持设置 5.5,5.6 版本,其他版本可能会有问题。此特性从 1.6 版本开始支持。

    13. 全局表一致性检测

    useGlobleTableCheck

    通过在全局表增加_MYCAT_OP_TIME 字段来进行一致性检测,类型为 bigint,create 语句通过 mycat执行会自动加上这个字段,其他情况请自己手工添加。
    此特性从 1.6 版本开始支持。

    14. useOffHeapForMerge

    此特性从 1.6 版本开始支持。
    使用非堆内存(Direct Memory)处理跨分片结果集。 1 开启 0关闭

    15. 分布式事务

    <!--分布式事务开关,0 为不过滤分布式事务,1 为过滤分布式事务(如果分布式事务内只涉及全局表,则不过滤),2 为不过滤分布
    式事务,但是记录分布式事务日志-->
    <property name="handleDistributedTransactions">0</property>

    主要应用场景,主要为了控制是否允许跨库事务。

    此特性从 1.6 版本开始支持。

  • 相关阅读:
    Python第一周作业
    turtle库的学习笔记
    绘制五角星
    绘制六角形
    绘制同心圆
    绘制叠加三角形
    Slash And Black Slash/正斜杠和反斜杠
    OpenCv中avi视频的读取问题,以及内部格式要求
    OpenCv和matlab对图像的读取
    个人项目进度
  • 原文地址:https://www.cnblogs.com/myitnews/p/12380197.html
Copyright © 2011-2022 走看看