当前位置: 首页 > news >正文

【MySQL】MyCAT三大配置文件详解(MySQL专栏启动)

📫作者简介:小明java问道之路,2022年度博客之星全国TOP3,专注于后端、中间件、计算机底层、架构设计演进与稳定性建工设优化。文章内容兼具广度深度、大厂技术方案,对待技术喜欢推理加验证,就职于知名金融公司后端高级工程师。

        

📫 热衷分享,喜欢原创~ 关注我会给你带来一些不一样的认知和成长。

        

🏆 2022博客之星TOP3 | CSDN博客专家 | 后端领域优质创作者 | CSDN内容合伙人

🏆 InfoQ(极客邦)签约作者、阿里云专家 | 签约博主、51CTO专家 | TOP红人、华为云享专家

        

🔥如果此文还不错的话,还请👍关注、点赞、收藏三连支持👍一下博主~ 


🍅 文末获取联系 🍅  👇🏻 精彩专栏推荐订阅收藏 👇🏻

专栏系列(点击解锁)

学习路线(点击解锁)

知识定位

🔥Redis从入门到精通与实战🔥

Redis从入门到精通与实战

围绕原理源码讲解Redis面试知识点与实战

🔥MySQL从入门到精通🔥

MySQL从入门到精通

全面讲解MySQL知识与企业级MySQL实战

🔥计算机底层原理🔥

深入理解计算机系统CSAPP

以深入理解计算机系统为基石,构件计算机体系和计算机思维

Linux内核源码解析

围绕Linux内核讲解计算机底层原理与并发

🔥数据结构与企业题库精讲🔥

数据结构与企业题库精讲

结合工作经验深入浅出,适合各层次,笔试面试算法题精讲

🔥互联网架构分析与实战🔥

企业系统架构分析实践与落地

行业最前沿视角,专注于技术架构升级路线、架构实践

互联网企业防资损实践

互联网金融公司的防资损方法论、代码与实践

🔥Java全栈白宝书🔥

精通Java8与函数式编程

本专栏以实战为基础,逐步深入Java8以及未来的编程模式

深入理解JVM

详细介绍内存区域、字节码、方法底层,类加载和GC等知识

深入理解高并发编程

深入Liunx内核、汇编、C++全方位理解并发编程

Spring源码分析

Spring核心七IOC/AOP等源码分析

MyBatis源码分析

MyBatis核心源码分析

Java核心技术

只讲Java核心技术

本文目录

本文目录

本文导读

一、schema.xml 详解

1、schema 标签

2、dataNode 标签

3、dataHost 标签

二、server.xml 详解

三、rule.xml 详解

总结


本文导读

详解MyCAT主要配置文件schema.xml、server.xml、rule.xml的标签和属性,通过MyCAT实战实现数据库的分库分表及分片扩展。

一、schema.xml 详解

schema.xml  是 MyCat 中的配置文件之一,涵盖了MyCat的逻辑库、表、分片规则、分片节点和数据源的配置。

schema.xml  主要包含以下三组标签:

<schema>标签,配置逻辑表信息。

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

<dataNode>标签,配置节点相关信息。

name,唯一ID,供上层标签使用;maxon/ min Con,最大连接数/最小连接数;balance,负载均衡策略配置0、1、2、3;writeτype,写操作分配方法;dbDriver,数据库驱动,支持 native、jdbc。

<dataHost>标签,配置节点的特定映射数据源的信息。

1、schema 标签

<schema>标签,用于定义 MyCat 实例中的逻辑库。MyCat实例中可以有多个逻辑库。

不同的逻辑库可以通过模式标记进行划分,MyCat中的逻辑库概念相当于MySQL中的数据库概念。

<mycat:schema xmlns:mycat="http://io.mycat/">
    <!-- 逻辑库 -->
    <schema name="DB01" checkSQLschema="true" sqlMaxLimit="100">
        <!-- 逻辑表的名字, 逻辑表下的节点,逻辑表数据存入节点的规则 -->
        <table name="TB_ORDER" dataNode="dn1,dn2,dn3" rule="auto-sharding-long"/>
    </schema>
</mycat:schema>

2、dataNode 标签

<dataNode>标签,定义MyCat中的数据节点,通常称为数据分片,dataNode标记是一个独立的数据分区。

name,数据节点的名称    需要唯一 ; 在table标签中会引用这个名字, 标识表与分片的对应关系

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

database,定义分片所属的数据库    

<mycat:schema xmlns:mycat="http://io.mycat/">
    <!-- 节点名称,节点关联的物理主机位置,关联数据库名称 -->
    <dataNode name="dn1" dataHost="dhost1" database="db01"/>
    <dataNode name="dn2" dataHost="dhost2" database="db01"/>
    <dataNode name="dn3" dataHost="dhost3" database="db01"/>
</mycat:schema>

3、dataHost 标签

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

<mycat:schema xmlns:mycat="http://io.mycat/">
    <!-- 节点名称,节点关联的物理主机位置,关联数据库名称 -->
    <dataNode name="dn1" dataHost="dhost1" database="db01"/>

    <!-- 与节点dataHost保持一致,最大连接、最小连接、负载均衡策略 -->
    <dataHost name="dhost1" maxCon="1000" minCon="10" balance="0" writeType="0" dbType="mysql" dbDriver="jdbc" switchType="1" slaveThreshold="100">
        <!-- 心跳需要改为jdbc -->
        <heartbeat>select user()</heartbeat>
        <!-- 如果不是集群的话,可以都写master,注意每个物理库地址和账号密码需要更改   -->
        <writeHost host="master" url="jdbc:mysql://192.168.95.xxx:3306?useSSL=false&amp;serverTimezone=Asia/Shanghai&amp;characterEncoding=utf8"
                   user="root" password="1234">
        </writeHost>
    </dataHost>
</mycat:schema>

二、server.xml 详解

server.xml,主要是配置我们连接时的权限过滤设置,例如我们可以在这里设置读写权限,用户登录验证,访问数据库的权限等等。

<system>标签,为配置的系统参数

<firewall>标签,用来定义防火墙;firewall下whitehost标签用来定义 IP白名单 ,blacklist用来定义 SQL黑名单。

<user>标签,主要用于定义登录MyCat的用户和权限,声明用户名、指定该用户名访问MyCat的密码等等操作。

<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="sqlExecuteTimeout">300</property>  <!-- SQL 执行超时 单位:秒-->
        <property name="sequnceHandlerType">2</property>
        <!--必须带有MYCATSEQ_或者 mycatseq_进入序列匹配流程 注意MYCATSEQ_有空格的情况-->
        <property name="sequnceHandlerPattern">(?:(\s*next\s+value\s+for\s*MYCATSEQ_(\w+))(,|\)|\s)*)+</property>
        <!-- 子查询中存在关联查询的情况下,检查关联字段中是否有分片字段 .默认 false -->
        <property name="subqueryRelationshipCheck">false</property>
        <!--默认为type 0: DirectByteBufferPool | type 1 ByteBufferArena | type 2 NettyBufferPool -->
        <property name="processorBufferPoolType">0</property>
        <!--默认是65535 64K 用于sql解析时最大文本长度 -->
        <property name="maxStringLiteralLength">65535</property>
        <!--分布式事务开关,0为不过滤分布式事务,1为过滤分布式事务(如果分布式事务内只涉及全局表,则不过滤),2为不过滤分布式事务,但是记录分布式事务日志-->
        <property name="handleDistributedTransactions">0</property>
        <!-- off heap for merge/order/group/limit      1开启   0关闭 -->
        <property name="useOffHeapForMerge">0</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>
        <!--如果为 true的话 严格遵守隔离级别,不会在仅仅只有select语句的时候在事务中切换连接-->
        <property name="strictTxIsolation">false</property>
        <property name="useZKSwitch">true</property>
    </system>
    
    <!--这些配置情况下对于127.0.0.1都能以root账户登录-->
    <firewall>
        <whitehost>
            <host host="1*7.0.0.*" user="root"/>
        </whitehost>
        <blacklist check="false">
        </blacklist>
    </firewall>
    
    <user name="user">
        <property name="password">123456</property>
        <property name="schemas">DB01</property>
        <property name="readOnly">true</property>
    </user>
</mycat:server>

三、rule.xml 详解

rule.xml文件,设置我们定义的分片规则,分片规则决定了逻辑表中的数据以何种方式落到不同的数据库中 。

规则需要在 schema.xml 中进行配置,需要对照着 rule.xml 中的规则方式进行设置。

这些规则引用了外部具体的文件,作为规则的具体配置,以默认规则举例,我们在使用过程中可以灵活的使用分片算法,或者对同一个分片算法使用不同的参数,它让分片过程可配置化。

<!-- 默认的规则,根据id进行分片 -->
<tableRule name="auto-sharding-long">
    <rule>
        <columns>id</columns>
        <!-- 具体的计算方式在rang-long中 这是一个引用  具体的路径在 autopartition-long.txt -->
        <algorithm>rang-long</algorithm>
    </rule>
</tableRule>

总结

详解MyCAT主要配置文件schema.xml、server.xml、rule.xml的标签和属性,通过MyCAT实战实现数据库的分库分表及分片扩展。

相关文章:

  • go-zero源码阅读-布隆过滤器
  • 数组试题(Python实现)
  • PHP 杂项 函数
  • Mybatis持久层框架 | CRUD
  • 内网渗透(八)之基础知识-企业域中计算机分类和专业名
  • Keras深度学习实战——使用深度Q学习进行SpaceInvaders游戏
  • 周赛331总结
  • SSM整合知识点记录
  • 设计模式-模板方法模式
  • MySQL数据库01——mysql的安装和配置(包含workbench安装,超详细)
  • 2/4考试总结
  • Ta-Lib源码解析(三):蜡烛图指标 (Candlestick Indicator) #(附Python重构代码和示意图)(补充中)
  • 【嵌入式】MDK使用sct文件将代码段放入RAM中执行
  • 《基于Xilinx的时序分析、约束和收敛》目录与传送门
  • Jackson序列化带有注解的字段的原理浅析
  • 第十届“图灵杯”NEUQ-ACM程序设计竞赛题解(A-I)
  • Linux ALSA 之九:ALSA ASOC Codec Driver
  • 一文读懂JVM类加载机制过程及原理
  • 一文带你入门MyBatis Plus
  • java split()方法 toLowerCase() 方法
  • 电加热油锅炉工作原理_电加热导油
  • 大型电蒸汽锅炉_工业电阻炉
  • 燃气蒸汽锅炉的分类_大连生物质蒸汽锅炉
  • 天津市维修锅炉_锅炉汽化处理方法
  • 蒸汽汽锅炉厂家_延安锅炉厂家
  • 山西热水锅炉厂家_酒店热水 锅炉
  • 蒸汽锅炉生产厂家_燃油蒸汽发生器
  • 燃煤锅炉烧热水_张家口 淘汰取缔燃煤锅炉
  • 生物质锅炉_炉
  • 锅炉天然气_天燃气热风炉