写点什么

MySQL 运维 5-Mycat 配置

作者:EquatorCoco
  • 2023-12-15
    福建
  • 本文字数:3037 字

    阅读完需:约 10 分钟

一、schema.xml


1.1 简介


schema.xml 作为 Mycat 中最重要的配置文件之一,涵盖了 Mycat 的逻辑库、逻辑表、分片规则、分片节点即数据源的配置。主要包括一下三组标签


  • schema 标签

    datanode 标签

    datahost 标签


1.2 schema 标签


用于定于 Mycat 实例中的逻辑库,一个 Mycat 实例中,可以有多个数据库,可以通过 schema 标签来划分不同的逻辑库。Mycat 中的逻辑库的概念,等同于 MySQL 中的 database 概念没需要操作某个逻辑库下的表时,就需要切换逻辑库,同 MySQL 一样,使用 use xxxx 语句。

    


核心属性:


  • name: 自定自定义的逻辑库苦命

    checkSQLschema: 在 SQL 语句操作时指定了数据库名称,执行时是否自动去除,true:自动去除,false 不自动去除,即如果有 true 时,我们可以不进入数据库查询.

    sqlMaxLimit: 如果未指定 limit 进行查询,列表查询模式默认查询的条数。


checkSQLschema 参数演示:

    


说明 1:当 checkSQLschema 为 true 时,我们可以不进入数据库查询,即使用 DB01.TB_ORDER 的方式,但是如果 checkSQLschema 为 false 的时候,就不能这样写了,就必须要要先 usr DB01;今日数据库里面在查找,所以这里大家就直接给 true 就行了。


1.3 schema 标签中的 table 标签


table 标签定义 Mycat 中逻辑库 schema 下的逻辑表,所有需要查分的表都需要在 table 标签中定义。


核心属性


  • name:定义逻辑表表名,在该逻辑库下唯一

    DataNode:定义逻辑表所属的 dataNode,该属性需要与 dataNode 标签中的 name 对应,多个 dataNode 用逗号隔开

    rule: 分片规则的名称,分片规则名字是在 rule.xml 中定义的

    primaryKey: 逻辑表对应的真是表的主键

    type: 逻辑表的类型,目前逻辑表只有全局表和普通表,如果未配置,默认是普通表,全局表配置为 global

1.4 dataNode 标签

    


dataNode 标签中定义了 Mycat 中的数据节点,也就是我们通常说的数据分片,一个 dataNode 标签就是一个独立的数据分片


核心属性


  • name:定义了数据节点名称

    dataHost:数据库实例主机名称,引用自 dataHost 标签中 name 属性

    database:定义分片所属数据库

1.5 dataHost 标签

    


该标签在 Mycat 逻辑库中作为底层标签,直接定义了具体的数据库实例、读写分离,心跳语句。


核心属性:


  • name:唯一标识符,供上层标签使用

    maxCon/minCon:最大连接数/最小连接数

    balance:负载均衡策略,取值 0,1,2,3 ,读写分离的时候,在详细说明这四个取值的意义。

    writeType:写操作分发方式(0:写操作转发到第一个 writeHost,第一个挂了,切换到第二个;1:写操作随机发配到配置的 writeHost)

    dbDriver:数据库驱动,支持 native 和 jdbc,native 主要支持 MySQL5+,jdbc 主要支持 MySQL8+

1.6 schema.xml 逻辑库映射


逻辑库的名字和 mysql 数据库中的名字可以不一致的,例如我们这里配置的逻辑库的名字是大写的 DB01,而 MySQL 中的数据库名则是小写的 db01,这取决于逻辑库和 MySQL 真实数据库的映射关系。

    


schema.xml 整体配置流程即关系隐射示意

    


 二、rule.xml


rule.xml 中定义了所有拆分表的规则,在使用过程中可以灵活的使用分片算法,或者对同一个分片算法使用不同的参数,它让分片过程可配置化,主要包含两类标签:tableRule,Function

  



而在 schema.xml 中配置的分片规则就是在这里定义的

  


说明 1:在 tableRule 标签里面主要有 columns 和 algorithm 两个标签。


说明 2:columns 标签主要是分表的依据


说明 3:algorithm 标签主要是,分库分表的算法引用,这里 algorithm 里面的值就是 Function 标签的实现。

  


例如:auto-sharding-long 分表规则的,依据是 rang-long 这个算法。

  


而 rang-long 这个算法就在 function 标签中有定义,而 function 标签中的 class 就是对应这个算法的实现类。

  

说明 4:至于这里面的分库分表的规则具体的使用,我们会在后面分库分表实战章节,用到的时候在详细说。 


三、server.xml


server.xml 配置文件包含了 Mycat 的系统配置,主要有两个重要的标签:system, user.

3.1 system 标签

    


重要属性说明:


  • charset: 取值 utf8: 设置 Mycat 的字符集,字符集需要与 MySQL 的字符集保持一致

    nonePasswordLogin: 取值 [0, 1], 0:需要登录密码登录,1:不需要登录密码登录,默认为 0,设置为 1,则需要指定默认账户

    useHandshakeV10: 取值 [0,1],使用该选项主要是为了能够兼容高低版本的 jdbc 驱动,是否采用 handshakeV10 来与 client 进行通讯,1:是,0:否

    useSqlStat: 取值[0,1],开启 SQL 实时统计 1:开启,0:关闭,开启之后 Mycat 会自动统计 SQL 语句的执行情况:mysql -h xxx.xxx.xxx.xxx -P 9066 -u root -p 之后就可以查看,使用 show @@sql; show @@sql.low; show @@sql.sum 等,分别是查看 Myact 执行的 sql, 执行效率比较低的 SQL,SQL 的整体执行情况,读写比例等等。

    useGlobelTableCheak: 取值[0,1],是否开启全局表一致性检查,1:开启,0 关闭

    sqlExecuteTimeout: 取值 1000 等整数:SQL 执行的超时时间单位为秒

    sequnceHandleType:取值[0,1,2],用来指定 Mycat 全局序列类型,0:本地文件,1:数据库方式,2:为时间戳方式,默认使用本地文件方式,文件方式主要用于测试

    sequnceHandlePattern: 正则表达式:必须带有 MYCATSEQ 或者 mycatseq 进入序列匹配流程

    subqueryRelationshipCheck: 取值[true,false],子查询存在关联查询的情况下,检查关联字段中是否有分片字段,默认 false

    useCompression: 取值[0,1],开启 mysql 压缩协议,0:关闭,1:开始

    fakeMySQLVersion: 5.5,5.6,8.0.27 等,设置模拟 MySQL 版本号

    defaultSqlParser: 由于 Mycat 的最初版本使用了 FoundationDB 的 SQL 解析器,在 Mycat1.3 后增加了 Druid 解析器,所以要设置 defaultSqlParser 属性来指定默认的解析器,解析器有两个:druidparser 和 fdbparser,在 Mycat1.4 之后默认是 fruidparser,fdbparser 已经废弃

    processors: 取值[1,2....] 指定系统可用的线程数量,默认值为 CPU 核心 乘以 每个核心运行的线程数,processors 会影响 processorBufferPool,processorBufferLocalPercent,processorExecutor 属性,所以在性能调优时可以适当的修改 processors 的值

    processorBufferChunk: 指定每次分配 Socker Direct Buffer 默认值为 4096 字节,也会影响 BufferPool 长度,如果一次性获取字节过多而导致 buffer 不都用,则会出现警告,可以调大该值

    processorExecutor: 指定 NIOProcessor 上共享 businessExecutor 固定线程池的大小,Mycat 把异步任务交给 businessExecutor 线程池,在新版本的 Mycat 中这个连接池使用频率不高,可以适当的把该值调小

    packetHeaderSize: 指定 MySQL 协议中的报文头长度,默认 4 个字节。

    maxPacketSize: 指定 MySQL 协议可以携带的数据最大大小,默认值为 16M

    idleTimeout: 取值 30 等,指定连接的空闲时间的超时长度,如果超时将关闭资源并回收,默认 30 分钟

    txlsolation:取值[1,2,3,4], 初始化前端连接的事务隔离级别,默认为 REPEATED_READ,对应数字 3,READ_UNCOMMITED=1, READ_COMMITED=2,REPEATED_READ=3,SERIALIZABLE=4

    sqlExecuteTimeout: 取值 300 等, 执行 SQL 的超时时间,如果 SQL 语句执行超时,将关闭连接,默认 300 秒

    serverPort: 8066 ,定义 Mycat 的使用端口,默认 8066

    managerPort: 9066, 定义 Mycat 的管理端口,默认 9066

3.2 user 标签

    


说明 1:server.xml 中允许有多个 user,即同时配置多个用户的权限


说明 2:如果一个账户可以访问多个逻辑库,多个逻辑库之间用逗号隔开


说明 3:dml 中的四个二进制数分别代表增,改,查,删的权限


说明 4:如果逻辑表和逻辑库的权限冲突,则就近原则,即优先使用逻辑表的权限


文章转载自:Se7eN_HOU

原文链接:https://www.cnblogs.com/Se7eN-HOU/p/17901253.html

项目体验地址:http://www.jnpfsoft.com/?from=001

用户头像

EquatorCoco

关注

还未添加个人签名 2023-06-19 加入

还未添加个人简介

评论

发布
暂无评论
MySQL运维5-Mycat配置_MySQL_EquatorCoco_InfoQ写作社区