【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&serverTimezone=Asia/Shanghai&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实战实现数据库的分库分表及分片扩展。