mycat配置文件详解

  • Post author:
  • Post category:其他




相关配置文件说明


配置文件目录conf说明:

server.xml:mycat的配置文件,设置账号、参数等
schema.xml:mycat对应的物理数据库和数据库表的配置
rule.xml:分库分表规则配置
log4j2.xml

mycat默认端口8066

常见的系统参数配置还有:


1.server.xml配置文件说明:

标签一.system:用于配置mycat系统参数,其中

常见的系统参数有:

<system>
    <!-- mycat 服务连接端口 -->
    <property name="serverPort">8066</property>
    <!-- mycat 服务管理端口 -->
    <property name="managerPort">9066</property>
    <!-- mycat 服务监听的ip -->
    <property name="bindIp">0.0.0.0</property>
    <!-- 0为需要密码登陆、1为不需要密码登陆;默认为0,设置为1则需要指定默认账户-->
    <property name="nonePasswordLogin">0</property>
    <!-- 前端连接的写队列大小 -->
    <property name="frontWriteQueueSize">2048</property>
    <!-- 设置字符集编码 -->
    <property name="charset">utf8</property>
    <!-- mycat 的进程数量 -->
    <property name="processors">8</property>
    <!-- 闲置连接超时时间,单位:毫秒 -->
    <property name="idleTimeout">1800000</property>
    <!-- 默认最大返回的数据集大小 -->
    <property name="defaultMaxLimit">100</property>
    <!-- 允许的最大包大小 -->
    <property name="maxPacketSize">104857600</property>
    <!-- 0遇上没有实现的报文(Unknown command:),就会报错、1为忽略该报文,返回ok报文。
在某些mysql客户端存在客户端已经登录的时候还会继续发送登录报文,mycat会报错,该设置可以绕过这个错误-->
    <property name="ignoreUnknownCommand">0</property>
    <property name="useHandshakeV10">1</property>
    <property name="removeGraveAccent">1</property>
    <!-- 1为开启实时统计、0为关闭 -->
    <property name="useSqlStat">0</property>
    <!-- 1为开启全加班一致性检测、0为关闭 -->
    <property name="useGlobleTableCheck">0</property>
    <!-- SQL 执行超时 单位:秒-->
    <property name="sqlExecuteTimeout">300</property>
    <property name="sequnceHandlerType">1</property>
    <!--必须带有MYCATSEQ_或者 mycatseq_进入序列匹配流程 注意MYCATSEQ_有空格的情况-->
    <property name="sequnceHandlerPattern">(?:(\s*next\s+value\s+for\s*MYCATSEQ_(\w+))(,|\)|\s)*)+</property>
    <!-- 子查询中存在关联查询的情况下,检查关联字段中是否有分片字段 .默认 false -->
    <property name="subqueryRelationshipCheck">false</property>
    <property name="sequenceHanlderClass">io.mycat.route.sequence.handler.HttpIncrSequenceHandler</property>
    <!--默认为type 0: DirectByteBufferPool | type 1 ByteBufferArena | type 2 NettyBufferPool -->
    <property name="processorBufferPoolType">0</property>
    <!--分布式事务开关,0为不过滤分布式事务,1为过滤分布式事务(如果分布式事务内只涉及全局表,则不过滤),2为不过滤分布式事务,但是记录分布式事务日志-->
    <property name="handleDistributedTransactions">0</property>
    <!-- off heap for merge/order/group/limit  1开启;0关闭 -->
    <property name="useOffHeapForMerge">0</property>
    <!--是否采用zookeeper协调切换  -->
    <property name="useZKSwitch">false</property>
    <!--如果为 true的话 严格遵守隔离级别,不会在仅仅只有select语句的时候在事务中切换连接-->
    <property name="strictTxIsolation">false</property>
    <!-- Mycat连接数据库时使用的隔离级别
         1 - 读未提交
         2 - 读已提交
         3 - 可重复读
         4 - 串行化
     -->
    <property name="txIsolation">2</property>
    <property name="useZKSwitch">true</property>
    <!--如果为0的话,涉及多个DataNode的catlet任务不会跨线程执行-->
    <property name="parallExecute">0</property>
</system>

重点是

user标签

<user name="zabbix">
                <property name="password">123456</property>
                <property name="schemas">zabbix_db</property>
                <property name="readOnly">false</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:连接mycat的用户名

password:连接mycat的密码

schemas:逻辑数据库名,多个用逗号分开

privileges:配置用户针对表的增删查改权限,默认为false。如果需要对库里的某些表指定权限的话,需要修改:

<privileges check="true">
                        <schema name="TESTDB" dml="0110" >
                                <table name="tb01" dml="0000"></table>
                                <table name="tb02" dml="1111"></table>
                        </schema>
                </privileges>   

dml是权限值,四位对用增(insert)、改(update)、查(select)、删(delete),1111表示拥有四者权限。

table name后面接表的名字。


加密明文密码:


上面的mycat用户密码直接明文写在上面,非常的不安全。一般来说使用加密后的密码复制粘贴上去。myat自带加密工具:

java -cp ../lib/Mycat-server-1.6-RELEASE.jar io.mycat.util.DecryptUtil 0:zabbix:123456
Ah+F8HyhkYfNTbN0C9v5QGkws+pwpShOEXyt80YIGMqRPLIK/leoSI52xbEgpUvPImE8Bg52aHXWFXCeuKD6xw==

参数说明:
0:表示加密用于mycat用户密码,1则是dataHost密码
zabbix:用户名
123456:明文密码

粘贴到配置文件中去:

<user name="zabbix">
                <property name="password">Ah+F8HyhkYfNTbN0C9v5QGkws+pwpShOEXyt80YIGMqRPLIK/leoSI52xbEgpUvPImE8Bg52aHXWFXCeuKD6xw==</property>


2.日志配置文件log4j2.xml说明


日志输出格式默认为:

<PatternLayout>
                <Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %5p [%t] (%l) - %m%n</Pattern>
            </PatternLayout>
%d{yyyy-MM-dd HH:mm:ss.SSS}:日志的时间格式
%5p:输出的日志的级别,默认为info,<asyncRoot level="info" includeLocation="true">
%t:输出日志的线程名称
%l:日志输出语句所在的代码位置
%m:输出代码中指定的日志内容
%n:输出一个换行符


3.schema.xml配置文件

配置内容主要包括三部分:

配置逻辑库和逻辑表

配置逻辑表所存储的数据节点

配置数据节点所对应的物理数据库服务器信息

定义逻辑库:

<schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100">

checkSQLschema:判断发送给mycat的sql语句是否包含库名,true则表示会把库名删除。
name:逻辑库名,必修唯一不能重复
sqlMaxLimit="100":用于限制返回结果集的行数,值为-1表示关闭该限制。
randomDataNode属性定义将一些随机语句发送到该数据节点中

定义逻辑表

table

标签

<table name="hotnews" primaryKey="ID" autoIncrement="true" dataNode="dn1,dn2,dn3"
                           rule="mod-long" />
name表示逻辑表的名字,唯一不可重复,并且和数据库表名字一致,多个表用逗号隔开。
primaryKey 属性指定逻辑表中的主键,也是需要与物理表的主键一致
primaryKey 属性指定逻辑表中的主键,也是需要与物理表的主键一致
dataNode 属性指定物理表所在数据节点的名称,配置多个数据节点时需按索引顺序并使用逗号分隔,或指定一个索引范围:dn1$0-743。注意数据节点定义之后,顺序不能再发生改变,否则会导致数据混乱
rule 属性用于指定分片规则名称,对应rule.xml中的&lt;tableRule&gt;标签的name属性,如无需分片可以不指定
splitTableNames 属性定义是否允许多个表的定义


数据节点dataNode


data定义的是数据节点,数据节点指向的是存储逻辑表的物理数据库。示例:

<dataNode name="dn1" dataHost="localhost1" database="db1" />
        <dataNode name="dn2" dataHost="localhost1" database="db2" />
        <dataNode name="dn3" dataHost="localhost1" database="db3" />
可以配置一个范围:
<dataNode name="dn1$0-743" dataHost="localhost1" database="db$0-743"/>

name:数据节点的名称,必须唯一
dataHost:指定分片所在的物理主机
database:指定物理数据库名称

配置物理数据库主机:

#默认配置内容
<dataHost name="localhost1" maxCon="1000" minCon="10" balance="0"
                          writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
                <heartbeat>select user()</heartbeat>
                <!-- can have multi write hosts -->
                <writeHost host="hostM1" url="localhost:3306" user="root"
                                   password="123456">
                        <!-- can have multi read hosts -->
                        <readHost host="hostS2" url="192.168.1.200:3306" user="root" password="xxx" />
                </writeHost>
                <writeHost host="hostS1" url="localhost:3316" user="root"
                                   password="123456" />
                <!-- <writeHost host="hostM2" url="localhost:3316" user="root" password="123456"/> -->
        </dataHost>

writeHost标签配置写实例,即主从中的master节点
readHost标签配置读实例,即主从中的slave节点
readHost是writeHost的子标签,与writeHost有绑定关系
在一个dataHost内可以定义多个writeHost和readHost。但是,如果writeHost指定的后端数据库宕机,那么这个writeHost绑定的所有readHost都将不可用。另一方面,由于这个writeHost宕机系统会自动**加粗样式**的检测到,并切换到备用的writeHost上去。


dataHost标签属性:



name

属性用于定义主机名称,必须唯一


maxCon

属性指定每个读/写实例连接池的最大连接数。也就是说,标签内嵌套的writeHost、readHost 标签都会使用这个属性的值来实例化出连接池的最大连接数


minCon

属性指定每个读写实例连接池的最小连接数,即初始化连接池的大小


dbType

属性指定后端连接的数据库类型,目前支持二进制的mysql协议,还有其他使用JDBC连接的数据库


dbDriver

属性指定连接后端数据库使用的驱动,目前可选的值有native和JDBC


slaveThreshold

属性用于定义主从复制延时阈值,当Seconds_Behind_Master > slaveThreshold时,读写分离筛选器会过滤掉此Slave机器,防止读到很久之前的旧数据


balance

属性指定读写分离的负载均衡类型,目前的取值有4 种:

  • 0:不开启读写分离机制,所有读操作都发送到当前可用的 writeHost 上
  • 1:全部的readHost与stand by writeHost参与select语句的负载均衡
  • 2:所有读操作都随机在writeHost、readhost 上分发
  • 3:所有读请求随机分发到 wiriterHost 对应的readhost 执行。即 writerHost 不负担读压力,全部读请求由

    readhost 执行。注意该取值只在1.4及其以后版本有,1.3没有


writeType

属性指定写实例的负载均衡类型,目前的取值有4 种:

  • -1:表示不自动切换

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

  • 1:所有写操作都随机的发送到配置的writeHost,1.5 以后废弃不推荐使用

  • 2:基于MySQL主从同步的状态决定是否切换(1.4 新增)


switchType

属性用于指定主从切换的方式:

  • -1:表示不自动切换

  • 1:默认值,自动切换

  • 2:基于MySQL主从同步的状态决定是否切换,心跳检测语句为:show slave status

  • 3:基于MySQL galary cluster的切换机制(适合集群,1.4.1新增),心跳检测语句为show status like

    ‘wsrep%’


writehost 标签、readHost标签

这两个标签都用于配置一组主从数据库的相关信息,Mycat用这两个标签配置的连接信息实例化后端连接池。唯一不同的是,writeHost 配置写实例(master)、readHost 配置读实例(salve),并且readHost 为writeHost 的子标签。通过这两个标签可以组合读/写实例以满足系统的要求。

在一个dataHost内可以定义多个writeHost和readHost。但是,如果writeHost指定的后端数据库宕机,那么这个writeHost绑定的所有readHost都将不可用。另一方面,当一个writeHost宕机时系统会自动检测到,并切换到备用的writeHost 上去。


writehost 标签及readHost标签的属性

这两个标签的属性相同,这里就一起介绍:

host 属性用于标识不同实例名称,一般writeHost名称使用M1作为后缀,readHost则使用S1作为后缀

url 属性用于配置数据库的连接地址,如果是使用native的dbDriver,则一般为address:port这种形式。用JDBC或其他的dbDriver,则需要特殊指定。例如,当使用JDBC 时则可以这么写:jdbc:mysql://localhost:3306/

user 属性配置数据库用户名

password 属性配置数据库密码

weight 属性配置某个数据库在 readhost 中作为读节点的权重

usingDecrypt 属性指定是否对密码加密,默认为0, 若需要开启则配置为1



版权声明:本文为qq_37369726原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。