数据中间件 - MyCat2 配置文件说明

news2024/11/25 1:41:31

有谁会不喜欢美女和猫呢

数据中间件 - MyCat2 配置文件说明

本章内容基于 MyCat2 版本. 会对 Mycat 中的配置文件作用,以及结合 Mycat 的一些概念进行介绍,比起一上来就盲目的开始操作,然后遇到各种问题,先从全局进行了解对提高效率是有帮助的.

MyCat 的配置文件都存放在 conf 路径下.

image.png

server.json 服务器配置

server.json 是对 Mycat Server 的配置. ip , port , mycatId 之类的。

users 用户配置

users 路径下存放的是 Mycat Server 用户的配置. 也就是哪些账号可以访问 MyCat Server , 和 MySQL 的账号类似. 默认会存在一个 root.user.json 配置文件. ip 配置了值会限定访问 IP. transactionType 是事务类型, 默认为 proxy (只支持本地事务) , 还支持 XA 事务.

{
	"dialect":"mysql",
	"ip":null,
	"password":"123456",
	"transactionType":"proxy",
	"username":"root"
}

datasources 数据源配置

datasources 路径下存放了数据源配置文件, 可以配置多个数据源,名称需要唯一。默认会存在一个 prototypeDs.datasource.json 原型数据源配置。

{
	"dbType":"mysql",
	"idleTimeout":60000,
	"initSqls":[],
	"initSqlsGetConnection":true,
	"instanceType":"READ_WRITE",
	"maxCon":1000,
	"maxConnectTimeout":3000,
	"maxRetryCount":5,
	"minCon":1,
	"name":"prototypeDs",
	"password":"root",
	"type":"JDBC",
	"url":"jdbc:mysql://127.0.0.1:3306/mycat?useUnicode=true&serverTimezone=Asia/Shanghai&characterEncoding=UTF-8",
	"user":"root",
	"weight":0
}

partition 包含了三部分组成 targetName , schema , table , targetName 可以是集群也可以是数据源 (集群一会讲) , schema 是物理库层面的 schema , table 是物理层面的 table 。简单的理解这个图就是, MyCat 端对逻辑表进行分区, 通过集群或者是数据源去访问物理库中的表。

image.png

clusters 集群配置

clusters 路径下存放了集群配置。默认会有一个 prototype.cluster.json 配置文件。 集群就是多个数据源所组成了一个数据源集群。在集群中可以做故障切换,负载均衡等。比数据源的可用性更高。集群中可以配置多个 masters 主节点,和多个 replicas 从节点。其中配置的值是 datasource 的名称。 这里再看上面的图就可以理解为什么 targetName 可以是 cluster datasource 了,他们的作用都是用来访问物理库。

{
	"clusterType":"MASTER_SLAVE",
	"heartbeat":{
		"heartbeatTimeout":1000,
		"maxRetry":3,
		"minSwitchTimeInterval":300,
		"slaveThreshold":0
	},
	"masters":[
		"prototypeDs"
	],
        "replicas":[//配置多个从节点
		"xxxx"
	],
	"maxCon":200,
	"name":"prototype",
	"readBalanceType":"BALANCE_ALL",
	"switchType":"SWITCH"
}

schemas 逻辑表和物理表的映射关系

schemas 路径下存放了逻辑表和物理表的映射关系。先来理解一下什么是逻辑表什么是物理表。

image.png

MyCat 端暴漏给客户端的都是逻辑表, 因为数据进行了水平拆分, 写入逻辑表的数据会经过分片策略最终被写入到对应的真是物理表当中.

例如我们现在有这样一张表(逻辑表和物理表结构要保持一致)

CREATE TABLE employee (
  id INT PRIMARY KEY,
  name VARCHAR(100) NOT NULL
);

现在我们两个物理库,每个库中有两个物理表,我们在客户端执行一条 insert 语句

INSERT INTO employee (id, name) VALUES (1, 'DevX');

我们采用根据 id 值取模 (%) 分片算法, 这时候分片过程是这样的

  1. 1 % 2 = 1 选择对应的物理库
  2. 1 % 2 = 1 选择对应的物理表

所以这条数据最终会被写入到 database_1 中的 employee_1 物理表当中。

information_schema.schema.json 文件举例

schemaName 物理库名称
targetName 集群或数据源名称
customTables 定义自定义表映射规则,可以将自定义的SQL语句映射到物理表上。此配置一般用于一些特殊的查询需求,例如多表关联查询、视图查询、存储过程等,在MyCAT中通过自定义表映射规则,可以将这些特殊需求转化为标准的SQL语句,从而实现对数据的查询和操作。
globalTables 定义全局表规则,全局表是一种特殊的表,可以在不同的逻辑库之间进行数据共享,即可以在一个逻辑库中插入、更新、删除数据,并在另一个逻辑库中查询到这些数据。通过定义 globalTables ,可以将多个逻辑库中的表定义为全局表,从而实现数据共享的功能。
normalProcedures 定义普通存储过程规则。普通存储过程是一种可以在MyCAT服务端上执行的SQL脚本,通过预编译和缓存操作可以提高SQL执行的效率。通过定义 normalProcedures ,可以将多个普通存储过程定义为一个逻辑库中的公共存储过程,从而方便SQL语句的调用和执行。
normalTables 定义普通表规则。普通表是一种与MySQL实例中的物理表相对应的虚拟表,在MyCAT服务端上进行路由和转发操作。
shardingTables 定义需要分片的表。

{
  "customTables": {},
  "globalTables": {},
  "normalTables": {
    "ROUTINES": {
      "createTableSQL": "CREATE TABLE information_schema.ROUTINES (\n\tSPECIFIC_NAME varchar(192),\n\tROUTINE_CATALOG varchar(192),\n\tROUTINE_SCHEMA varchar(192),\n\tROUTINE_NAME varchar(192),\n\tROUTINE_TYPE varchar(27),\n\tDATA_TYPE varchar(1024),\n\tCHARACTER_MAXIMUM_LENGTH  bigint(21),\n\tCHARACTER_OCTET_LENGTH bigint(21),\n\tNUMERIC_PRECISION bigint(3),\n\tNUMERIC_SCALE bigint(3),\n\tDATETIME_PRECISION bigint(3),\n\tCHARACTER_SET_NAME varchar(12),\n\tCOLLATION_NAME varchar(12),\n\tDTD_IDENTIFIER varchar(255),\n\tROUTINE_BODY varchar(255),\n\tROUTINE_DEFINITION varchar(255),\n\tEXTERNAL_NAME varchar(255),\n\tEXTERNAL_LANGUAGE varchar(255),\n\tPARAMETER_STYLE varchar(255),\n\tIS_DETERMINISTIC varchar(255),\n\tSQL_DATA_ACCESS char(64),\n\tSQL_PATH varchar(255),\n\tSECURITY_TYPE varchar(255),\n\tCREATED datetime,\n\tLAST_ALTERED datetime,\n\tSQL_MODE varchar(80),\n\tROUTINE_COMMENT varchar(12),\n\tDEFINER varchar(64),\n\tCHARACTER_SET_CLIENT varchar(64),\n\tCOLLATION_CONNECTION varchar(64),\n\tDATABASE_COLLATION varchar(64)\n)",
      "locality": {
        "schemaName": "information_schema",
        "tableName": "ROUTINES",
        "targetName": "prototype"
      }
    },
    "PARAMETERS": {
      "createTableSQL": "CREATE TABLE information_schema.parameters (\n\tSPECIFIC_CATALOG varchar(64),\n\tSPECIFIC_SCHEMA varchar(64),\n\tSPECIFIC_NAME varchar(64),\n\tORDINAL_POSITION bigint(11) UNSIGNED,\n\tPARAMETER_MODE varchar(5),\n\tPARAMETER_NAME varchar(64),\n\tDATA_TYPE longtext,\n\tCHARACTER_MAXIMUM_LENGTH bigint(21),\n\tCHARACTER_OCTET_LENGTH bigint(21),\n\tNUMERIC_PRECISION int(10) UNSIGNED,\n\tNUMERIC_SCALE bigint(11),\n\tDATETIME_PRECISION int(10),\n\tCHARACTER_SET_NAME varchar(64),\n\tCOLLATION_NAME varchar(64),\n\tDTD_IDENTIFIER mediumtext,\n\tROUTINE_TYPE enum('FUNCTION', 'PROCEDURE')\n)",
      "locality": {
        "schemaName": "information_schema",
        "tableName": "PARAMETERS",
        "targetName": "prototype"
      }
    },
    "CHARACTER_SETS": {
      "locality": {
        "targetName": "prototype"
      }
    },
    "COLLATIONS": {
      "locality": {
        "targetName": "prototype"
      }
    },
    "COLLATION_CHARACTER_SET_APPLICABILITY": {
      "locality": {
        "targetName": "prototype"
      }
    }
  },
  "schemaName": "information_schema",
  "shardingTables": {}
}

sequences 序列号配置

sequences 路径下存放的是对生成序列号规则的配置.

如果不需要使用mycat的自增序列,而使用mysql本身的自增主键的功能,需要在配置中更改对应的建表sql,不设置AUTO_INCREMENT关键字,这样,mycat就不认为这个表有自增主键的功能,就不会使用mycat的全局序列号.

建表sql可以自动在原型库对应的逻辑表的物理表获取,如果逻辑表的建表SQL与物理表的建表SQL不对应,则需要在配置文件中配置建表SQL.


DevX 会持续分享有趣的技术和见闻,如果你觉得本文对你有帮助希望你可以分享给更多的朋友看到。该文章会同步在微信公众号 【DevXJava】, 方便在微信客户端阅读。

DevX 不止于技术

DevXJava

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/584981.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

学习Node.js的9大理由以及日常开发中的14个高级特性和代码示例分享

目录 为什么要学Nodejs 1. 高级事件处理:事件驱动机制 2. 非阻塞I/O 3. 异步编程 4. 模块系统 5. 流式数据处理 6. 跨平台支持 7. 高性能网络编程 8. 调试工具 9. 第三方模块 10. 升级 V8 引擎至 10.7 11. 函数式编程 12. 高级路由 13. 试验 Node wat…

国内免费可用的ChatGPT网页版

ChatGPT 一、ChatGPT是个啥?二、16个国内免费的ChatGPT网站。三、ChatGPT使用方式 一、ChatGPT是个啥? chat:表示“聊天”。 GPT:则是Generative、Pre-trained、Transformer的缩写,表示“预训练语言模型”&#xff0…

【Unity100个实用小技巧】同一个Canvas下的UI顺序通过代码如何修改

☀️博客主页:CSDN博客主页💨本文由 萌萌的小木屋 原创,首发于 CSDN💢🔥学习专栏推荐:面试汇总❗️游戏框架专栏推荐:游戏实用框架专栏⛅️点赞 👍 收藏 ⭐留言 📝&#…

三维场景重建经典论文详解

来源:投稿 作者:小灰灰 编辑:学姐 论文标题: 《REAL-TIME INDOOR SCENE RECONSTRUCTION WITH RGBD AND INERTIA INPUT》 论文链接: https://arxiv.org/pdf/2008.00490.pdf https://github.com/CWanli/RecoNet 数据集:P…

停车系统多位多车算法

1、算法代码 下面代码是伪Java代码&#xff0c;看得懂就行。 //查询当前车牌号对应的车主的其他的车牌号的入场纪录&#xff0c;根据时间倒叙排列。 List<Record> comeRecords mapper.selectFromDB; //车主所有的在场车辆数量-车主拥有车位数量 等于需要计费的车辆数量…

虚拟机NAT模式下修改linux静态ip

首先修改VMware的虚拟网络编辑器&#xff0c;NAT设置-> 设置网关&#xff0c;一般ip的第四部分网关为2&#xff0c;第三部分自己设置。 然后设置自己windows电脑 右键属性里面的ipv4&#xff0c;设置为静态的&#xff0c;dns除了对应网关还加一个通用dns 8.8.8.8。 这些外…

基于Q-Table的强化学习笔记

基于Q-Table的强化学习笔记 1 几个概念1.1 状态空间 S S S和动作空间 A A A1.2 奖励 R R R1.3 价值函数与Q-Table1.4 马尔可夫性 2 基于Q-Table的强化学习算法2.1 SARSA算法2.2 Q-learning算法 1 几个概念 最近也从小白入手看了些强化学习(Reinforcement Learning&#xff0c;…

中国人民大学与加拿大女王大学金融硕士——每天都要优于过去的自己,加油!

职场中拉开人与人之间差距的&#xff0c;往往是日复一日微小的积累。满足已取得的成就会让人停滞不前&#xff0c;一旦停止学习&#xff0c;人就会止步不前。懂得持续学习、终生成长的人&#xff0c;能保持积极进取的状态。金融行业的你有计划来人民大学与加拿大女王大学金融硕…

累积运行时间功能块(SCL语言)

设备累积运行时间功能块梯形图源代码请参看下面的文章博客: SMART PLC设备累计运行时间功能块_RXXW_Dor的博客-CSDN博客功能块非常简单,没有什么特别需要说明的,方法不唯一仅供参考。https://blog.csdn.net/m0_46143730/article/details/129170452方法始终不唯一,受限于当…

【c】vscode c/c++环境配置

文章目录 1 mingw下载及配置1.1 mingw下载1.2 环境变量配置1.3 gdb安装 2 vscode c插件安装3 vscode文件配置 1 mingw下载及配置 1.1 mingw下载 https://sourceforge.net/projects/mingw-w64/files/ 1.2 环境变量配置 1.3 gdb安装 我下载的mingw未安装gdb调试 cmd执行: …

vue3 项目实践总结

一、挂载全局变量 1.1 main.js 中挂载 // 引入全局变量 import api from /api;const app createApp(App);// 挂载全局变量 app.config.globalProperties.$API api;app.use(store).use(router).use(ElementPlus).use(Vant).mount(#app);1.2 组件中获取 方法一 推荐使用proxy…

研发工程师玩转Kubernetes——非定时任务

在《研发工程师玩转Kubernetes——自动扩缩容》一文中&#xff0c;我们使用在本地使用wrk进行了压力测试。如果我们希望在容器中运行&#xff0c;该怎么做呢&#xff1f; 构建/推送wrk镜像 Dockerfile如下。主要就是在Ubuntu22中安装wrk。 From ubuntu:22.04 RUN apt-get up…

【Nodejs】Node-js笔记

Node.js 文章目录 Node.js一、Node.js概述1.1、介绍1.2、官网1.3、Node.js应用场景1.4、安装Node.js1.5、npm包管理器1.5.1、介绍1.5.2、切换npm源1.5.3、生成JSON配置文件1.5.4、查看当前安装的树形模块1.5.5、安装模块1.5.6、自定义脚本命令1.5.7 、自动重启应用 1.6、模块化…

VehicleHal.java - fwk层对应VehicleService

VehicleHal.java - fwk层对应VehicleService 1、VehicleHal.java初始化1.1 hal服务区分1.2 简要时序图 2、PowerHalService为例2.1 PowerHalService初始化和订阅2.2 简要时序图 android12-release 【IVI】VehicleService启动 【IVI】车载设备硬件抽象层VHAL 【IVI】CarService启…

【人脸识别】insightface 使用记录和搭建服务注意点和坑 从0到1

文章目录 前言1.开始1.1 前置1.2 再次运行&#xff0c;人脸检测跑通1.3 人脸特征抽取1.3.1 模型下载1.3.2 重新跑一下检测和识别1.3.3 人脸监测返回值分析1.3.4 计算相似度 1.4 全流程的相似度 2. 业务化人脸识别 前言 人脸识别项目&#xff0c;再走一遍。之前是公司老人留下的…

HTML+CSS实训——Day05——JavaScript基础知识点

前言 上一周我们只做了静态页面&#xff0c;这周开始要学js了&#xff0c;那我们先来认识一下他的语法和变量吧。 知识点 变量定义 学习了var还有console.log()输出变量 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8&…

点云配准算法综述-完整解读

点云配准的挑战 同源点云配准 同源点云的配准是指从同一类型的传感器,但在不同的时间或视角下获取的点云在进行配准问题中存在的挑战,其主要包含了 噪声和离群值。在不同的采集时间,环境和传感器噪声是不同的,采集到的点云在同一三维位置附近会包含噪声和异常值。部分重叠…

全网最火爆,从接口测试到接口自动化测试总结,卷王进阶高级...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 Python接口自动化测…

设计模式之美-为什么基于接口而非实现编程?有必要为每个类都定义接口吗?

我愿意称之为最强设计书籍之一。看完这篇文章使我对代码编写有了新的思考。值得注意的是文章全篇写的是伪代码&#xff0c;并没有真正实现方法的逻辑&#xff0c;不过这样反而有利于逻辑的理解。 在上一节课中&#xff0c;我们讲了接口和抽象类&#xff0c;以及各种编程语言是如…

如何跑通一个java项目

查找项目代码的途径&#xff1a;github,码云&#xff0c;掘金网 以小说精品屋项目(掘金网)为例&#xff1a; 先读Readme&#xff08;这里会介绍项目结构和技术选型&#xff09;&#xff0c;这里还会告诉你们怎么跑起来这个项目&#xff0c;比如让你先安装数据库&#xff0c;然…