其他分享
首页 > 其他分享> > Mycat 配置看这一篇就懂了

Mycat 配置看这一篇就懂了

作者:互联网

文章目录

前言

本文将对 Mycat 配置文件进行详细介绍,搞清楚配置文件的信息,才是正确使用 Mycat 的前提。
在这里插入图片描述

【图片来源网络】

应用连接Mycat服务时,Mycat首先会通过server.xml中的配置信息进行用户认证。用户通过验证后,所看到的逻辑库、逻辑表都是schema.xml中所配置的。当使用了水平切分时,Mycat会通过rule.xml里配置的规则来定位具体的物理数据库位置,从而完成写入/读取数据。


server.xml 配置

server.xml 保存了 mycat 需要的所有的系统级配置信息。


system 标签

用于配置 Mycat 的系统参数,其格式如下:

<system> 
    <!-- ${key}表示配置属性的名称,${value}表示该配置属性的值 --> 
    <property name="${key}">${value}</property> 
</system>

常见的系统参数举例:

<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> 
    <!-- 1表示发送握手数据包-->
    <property name="useHandshakeV10">1</property> 
    <!-- 禁止移除SQL中对关键字转义的 `` 符号-->
    <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>
    <!-- 是否采用zookeeper协调切换 --> 
    <property name="useZKSwitch">true</property> 
    <!--如果为0的话,涉及多个DataNode的catlet任务不会跨线程执行--> 
    <property name="parallExecute">0</property> 
</system>

user 标签

用于配置Mycat的访问用户及权限,其格式如下:

<user name="root" defaultAccount="true">
    <property name="password">123456</property>
    <property name="schemas">TESTDB</property>
    <property name="defaultSchema">TESTDB</property>
    <!--No MyCAT Database selected 错误前会尝试使用该schema作为schema,不设置则为null,报错 -->

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

property 标签


privileges 标签

对用户的 schema以及表进行精细化的DML权限控制。

check 属性表示是否开启DML权限检查,默认是关闭。

dml顺序说明:insert,update,select,delete

schema标签中属性:

table标签中属性:


firewall 标签

全局防火墙设置,从安全角度保证 Mycat 不被匿名 IP 访问。

<firewall>
    <whitehost>
        <host host="127.0.0.1" user="root"/>
        <host host="127.0.0.2" user="root"/>
    </whitehost>
    <blacklist check="false"></blacklist>
</firewall>

schema.xml 配置

schema 标签

schema 标签用于定义逻辑库,示例:

<schema name="TESTDB" checkSQLschema="true" sqlMaxLimit="100" dataNode="dn1">
...
</schema>

table 标签

使用了schema 标签定义逻辑库之后,还需要使用table 标签定义逻辑表。示例:

<schema name="TESTDB" checkSQLschema="true" sqlMaxLimit="100"> 
    <!-- 多表定义 --> 
    <table name="travelrecord,address" dataNode="dn1,dn2,dn3" rule="auto-sharding-long" splitTableNames ="true"/> 
    <!-- 单表定义 --> 
    <table name="oc_call" primaryKey="id" dataNode="dn1$0-743" rule="latest-month-calldate"/> 
</schema>

dataNode 标签

dataNode 标签用于定义数据节点,数据节点指向的是存储逻辑表的物理数据库。示例:

<dataNode name="dn1" dataHost="host1" database="test" />

dataNode也就是通常说的数据分片。一个 dataNode 是一个独立的数据分片。用 数据库实例+具体库来定义一个数据分片。


dataHost 标签

dataHost 标签用于定义后端物理数据库主机信息,该标签内有两个子标签,可以定义一组数据库主机信息。例如,定义一组主从集群结构的数据库主机信息:

【图片来自网络】

<dataHost name="host1" maxCon="1000" minCon="10" balance="0" writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
    <heartbeat>select user()</heartbeat>
    <writeHost host="hostM1" url="192.168.96.187:3306" user="root" password="123456">
        <readHost host="hostS1" url="192.168.96.187:3306" user="root" password="123456" />
    </writeHost>
</dataHost>

dataHost标签定义了具体的数据库实例,读写分离配置和心跳语句。


heartbeat 标签

<heartbeat>select user()</heartbeat>

heartbeat 标签内指明用于和后端数据库进行心跳检查的语句。例如,MySQL可以使用select user(),Oracle可以使用select 1 from dual 等。

writeHost & readHost 标签

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

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

writehost 标签及readHost标签的属性

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


小结

本文对 Mycat 两个重要的配置文件 server.xmlschema.xml 进行了详细描述,如果 Mycat 感兴趣请关注本专栏其他文章。

标签:一篇,标签,数据库,配置,Mycat,writeHost,schema,属性
来源: https://blog.csdn.net/weixin_42653522/article/details/119393263