• MyCat的入门介绍


    MyCat的入门介绍

    1、MyCat概述

    Mycat是开源的、活跃的、基于Java语言编写的MySQL数据库中间件。可以像使用mysql一样来使用mycat,对于开发人员来说根本感觉不到mycat的存在。开发人员只需要连接MyCat即可,而具体底层用到几台数据库,每一台数据库服务器里面存储了什么数据,都无需关心。 具体的分库分表的策略,只需要在MyCat中配置即可。
    在这里插入图片描述

    在MyCat的整体结构中,分为两个部分:上面的逻辑结构、下面的物理结构。
    在这里插入图片描述
    在MyCat的逻辑结构主要负责逻辑库、逻辑表、分片规则、分片节点等逻辑结构的处理,而具体的数据存储还是在物理结构,也就是数据库服务器中存储的。

    2、MyCat配置

    (1)schema.xml

    schema.xml 作为MyCat中最重要的配置文件之一 , 涵盖了MyCat的逻辑库 、 逻辑表 、 分片规则、分片节点及数据源的配置。
    在这里插入图片描述

    主要包含以下三组标签:

    • schema标签
    • datanode标签
    • datahost标签
    schema标签

    1). schema 定义逻辑库
    在这里插入图片描述
    schema 标签用于定义 MyCat实例中的逻辑库 , 一个MyCat实例中, 可以有多个逻辑库 , 可以通过 schema 标签来划分不同的逻辑库。MyCat中的逻辑库的概念,等同于MySQL中的database概念, 需要操作某个逻辑库下的表时, 也需要切换逻辑库(use xxx)。

    核心属性:

    • name:指定自定义的逻辑库库名
    • checkSQLschema:在SQL语句操作时指定了数据库名称,执行时是否自动去除;true:自动去除,false:不自动去除
    • sqlMaxLimit:如果未指定limit进行查询,列表查询模式查询多少条记录

    2). schema 中的table定义逻辑表
    在这里插入图片描述
    table 标签定义了MyCat中逻辑库schema下的逻辑表 , 所有需要拆分的表都需要在table标签中定义 。

    核心属性:

    • name:定义逻辑表表名,在该逻辑库下唯一
    • dataNode:定义逻辑表所属的dataNode,该属性需要与dataNode标签中name对应;多个dataNode逗号分隔
    • rule:分片规则的名字,分片规则名字是在rule.xml中定义的
    • primaryKey:逻辑表对应真实表的主键
    • type:逻辑表的类型,目前逻辑表只有全局表和普通表,如果未配置,就是普通表;全局表,配置为 global
    datanode标签

    在这里插入图片描述
    核心属性:

    • name:定义数据节点名称
    • dataHost:数据库实例主机名称,引用自 dataHost 标签中name属性
    • database:定义分片所属数据库
    datahost标签

    在这里插入图片描述
    该标签在MyCat逻辑库中作为底层标签存在, 直接定义了具体的数据库实例、读写分离、心跳语句。

    核心属性:

    • name:唯一标识,供上层标签使用
    • maxCon/minCon:最大连接数/最小连接数
    • balance:负载均衡策略,取值 0,1,2,3
    • writeType:写操作分发方式(0:写操作转发到第一个writeHost,第一个挂了,切换到第二个;1:写操作随机分发到配置的writeHost)
    • dbDriver:数据库驱动,支持 native、jdbc

    (2)rule.xml

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

    (3)server.xml

    server.xml配置文件包含了MyCat的系统配置信息,主要有两个重要的标签:systemuser

    1). system标签
    在这里插入图片描述

    主要配置MyCat中的系统配置信息,对应的系统配置项及其含义,如下:

    属性取值含义
    charsetutf8设置Mycat的字符集, 字符集需要与MySQL的字符集保持一致
    nonePasswordLogin0,10为需要密码登陆、1为不需要密码登陆 ,默认为0,设置为1则需要指定默认账户
    useHandshakeV100,1使用该选项主要的目的是为了能够兼容高版本的jdbc驱动, 是否采用HandshakeV10Packet来与client进行通信, 1:是, 0:否
    useSqlStat0,1开启SQL实时统计, 1 为开启 , 0 为关闭 ;开启之后, MyCat会自动统计SQL语句的执行情况 ; mysql -h 127.0.0.1 -P 9066 -u root -p 查看MyCat执行的SQL, 执行效率比较低的SQL , SQL的整体执行情况、读写比例等 ; show @@sql ; show @@sql.slow ; show @@sql.sum ;
    useGlobleTableCheck0,1是否开启全局表的一致性检测。1为开启 ,0为关闭 。
    sqlExecuteTimeout1000SQL语句执行的超时时间 , 单位为 s ;
    sequnceHandlerType0,1,2用来指定Mycat全局序列类型,0 为本地文件,1 为数据库方式,2 为时间戳列方式,默认使用本地文件方式,文件方式主要用于测试
    sequnceHandlerPattern正则表达式必须带有MYCATSEQ或者 mycatseq进入序列匹配流程 注意MYCATSEQ_有空格的情况
    subqueryRelationshipChecktrue,false子查询中存在关联查询的情况下,检查关联字段中是否有分片字段 .默认 false
    useCompression0,1开启mysql压缩协议 , 0 : 关闭, 1 : 开启
    fakeMySQLVersion5.5,5.6设置模拟的MySQL版本号
    defaultSqlParser由于MyCat的最初版本使用了FoundationDB的SQL解析器, 在MyCat1.3后增加了Druid解析器, 所以要设置defaultSqlParser属性来指定默认的解析器; 解析器有两个 :druidparser 和 fdbparser, 在MyCat1.4之后,默认是druidparser, fdbparser已经废除了
    processors1,2…指定系统可用的线程数量, 默认值为CPU核心x 每个核心运行线程数量; processors 会影响processorBufferPool, processorBufferLocalPercent, processorExecutor属性, 所有, 在性能调优时, 可以适当地修改processors值
    processorBufferChunk指定每次分配Socket Direct Buffer默认值为4096字节, 也会影响BufferPool长度,如果一次性获取字节过多而导致buffer不够用, 则会出现警告, 可以调大该值
    processorExecutor指定NIOProcessor上共享businessExecutor固定线程池的大小; MyCat把异步任务交给 businessExecutor线程池中, 在新版本的MyCat中这个连接池使用频次不高, 可以适当地把该值调小
    packetHeaderSize指定MySQL协议中的报文头长度, 默认4个字节
    maxPacketSize指定MySQL协议可以携带的数据最大大小, 默认值为16M
    idleTimeout30指定连接的空闲时间的超时长度;如果超时,将关闭资源并回收, 默认30分钟
    txIsolation1,2,3,4初始化前端连接的事务隔离级别,默认为REPEATED_READ , 对应数字为3 READ_UNCOMMITED=1; READ_COMMITTED=2; REPEATED_READ=3; SERIALIZABLE=4;
    sqlExecuteTimeout300执行SQL的超时时间, 如果SQL语句执行超时,将关闭连接; 默认300秒;
    serverPort8066定义MyCat的使用端口, 默认8066
    managerPort9066定义MyCat的管理端口, 默认9066

    2). user标签
    配置MyCat中的用户、访问密码,以及用户针对于逻辑库、逻辑表的权限信息,具体的权限描述方式及配置说明如下:
    在这里插入图片描述
    在测试权限操作时,我们只需要将 privileges 标签的注释放开。 在 privileges 下的schema标签中配置的dml属性配置的是逻辑库的权限。 在privileges的schema下的table标签的dml属性中配置逻辑表的权限。

  • 相关阅读:
    遗传算法优化的神经网络,遗传算法 优化
    【深度学习手记】使用DNN训练与CNN训练对数据集的要求不一样,为什么CNN网络训练输入的数据需要4维的
    什么软件做可视化大屏最简单、最快?
    Windows版 PostgreSQL 利用 pg_upgrade 进行大版升级操作
    【运维面试100问】(二)你最擅长什么?对某某擅长吗?---请设计一个符合公司使用的lvs架构
    Win下Eclipse安装
    leetcode-10-[150]逆波兰表达式求值 [239]滑动窗口最大值[347]前k个高频元素
    Linux线程同步(下)
    前端面试中Vue的有经典面试题一
    AM@隐函数@隐函数求导@幂指函数求导@参数式函数求导
  • 原文地址:https://blog.csdn.net/weixin_52411606/article/details/126733172