[TOC]
默认端口:**8066**
mycat 不负责主从同步,仅作为数据查询中间件,主从扔由mysql自行配置
## 原理
mycat的原理中最重要的一个动作是“拦截”,它拦截了用户发送过来的SQL语句,首先对SQL语句做了一些特定的分析:如分片分析、路由分析、读写分离分析、缓存分析等,然后将此SQL发送后端的真实数据库,并将返回的结果做适当的处理,最终再返回给用户。
总结:mycat会拦截sql语句,然后分析出涉及的**库**和**表**,然后进行命令分发,如果涉及了排序等操作,会在mycat端做相应的处理。
## 安装
[https://mp.weixin.qq.com/s?__biz=MzU1MDc4NjE2NQ==&mid=2247486038&idx=1&sn=6a73b799eaf44a2eabcdcefe8f3f3092&chksm=fb9a0f4ccced865a208ddf8645abf8800fc5e7d48b2f1de9262cbb652051b10daa668dc436f7&scene=21#wechat_redirect]()
## 配置
[https://mp.weixin.qq.com/s?src=11×tamp=1663056989&ver=4041&signature=HkXFlwrfN6byU0nBhL4EM4K*gRBSJrSmCkRzO3vPFPkQYz5Nh9H1Ncn4efNfgmYmcrklOd5B0w9DOhstE-o1aawkNSZ8uEP7Qj7cWpvs8IGAaPYTQaZ*jnxFllp7IK5-&new=1]()
>3个配置文件,也就是server.xml、schema.xml和rule.xml
### server.xml
![](https://img.kancloud.cn/a5/c9/a5c9735a633a804bc00e5df6a8241041_518x148.png)
#### ** user 标签**主要用于定义登录Mycat的用户和权限
可以修改user标签的name属性来指定用户名,修改password的值来修改密码,修改readOnly的值为true 或false来限制用户的读写权限。如果需要同时访问多个schema,则多个schema之间使用英文逗号隔开
>**schema**
![](https://img.kancloud.cn/43/85/4385419ec7ca3c443a3c71d11bffdf37_469x33.png)
>**benchmark**
通过设置benchmak属性的值来限制前端的整体连接数量,如果其值为0或不对其进行设置,则表示不限制连接数量
![](https://img.kancloud.cn/01/94/01946c830fe958539445afbf809b5059_365x32.png)
>**usingDecrypt**
通过设置usingDecrypt 属性的值来开启密码加密功能。默认值为0,表示不开启加密,值为1表示开启加密
### schema.xml
管理着 MyCat 的逻辑库、表、分片规则、DataNode 以及 DataSource
schema 标签用于定义 MyCat 实例中的逻辑库,MyCat 可以有多个逻辑库,每个逻辑库都有自己的相关配置。可以使用 schema 标签来划分这些不同的逻辑库。如果不配置 schema 标签,所有的表配置,会属于同一个默认的逻辑库。
**dataNode**
该属性用于绑定逻辑库到某个具体的 database 上,1.3 版本如果配置了dataNode,则不可以配置分片表,1.4 可以配置默认分片,只需要配置需要分片的表即可。
**checkSQLschema**
当该值设置为true时,如果执行语句`select * from TESTDB.users;`则MyCat会把语句修改为`select * from users;`。即把表示 schema 的字符去掉,避免发送到后端数据库执行时报错(`ERROR1146 (42S02): Table ‘testdb.users’ doesn’t exist`)。
不过,即使设置该值为 true ,如果语句所带的是并非是 schema 指定的名字,例如:`select * from db1.users;` 那么 MyCat 并不会删除 db1 这个字段,如果没有定义该库的话则会报错,所以在提供 SQL语句的最好是不带这个字段。
**sqlMaxLimit**
当该值设置为某个数值时。每条执行的 SQL 语句,如果没有加上 limit 语句,MyCat 也会自动的加上所对应的值。例如设置值为 100,执行`select * from TESTDB.users;`的效果为和执行`select * from TESTDB.users limit 100;`相同。
**table 标签**
table 标签定义了 MyCat 中的逻辑表,所有需要拆分的表都需要在这个标签中定义。
### rule.xml
定义了我们对表进行拆分所涉及到的规则定义。我们可以灵活的对表使用不同的分片算法,或者对表使用相同的算法但具体的参数不同。
这个文件里面主要有 tableRule 和 function 这两个标签。在具体使用过程中可以按照需求添加 tableRule 和 function。
**tableRule标签**
`name 属性`指定唯一的名字,用于标识不同的表规则。
`rule 标签`则指定对物理表中的哪一列进行拆分和使用什么路由算法。
`columns 标签`内指定要拆分的列名字。
`algorithm 标签`使用 function 标签中的 name 属性。连接表规则和具体路由算法。当然,多个表规则可以连接到同一个路由算法上。table 标签内使用。让逻辑表使用这个规则进行分片。
![](https://img.kancloud.cn/92/47/924766c9eaf37388198df2cac9cb2d0f_433x123.png)
**function 标签**
`name` 指定算法的名字。
`class` 制定路由算法具体的类名字。
`property` 为具体算法需要用到的一些属性。
![](https://img.kancloud.cn/83/d5/83d5d2d5c310535116485de22b0b07bd_681x57.png)
- Go准备工作
- 依赖管理
- Go基础
- 1、变量和常量
- 2、基本数据类型
- 3、运算符
- 4、流程控制
- 5、数组
- 数组声明和初始化
- 遍历
- 数组是值类型
- 6、切片
- 定义
- slice其他内容
- 7、map
- 8、函数
- 函数基础
- 函数进阶
- 9、指针
- 10、结构体
- 类型别名和自定义类型
- 结构体
- 11、接口
- 12、反射
- 13、并发
- 14、网络编程
- 15、单元测试
- Go常用库/包
- Context
- time
- strings/strconv
- file
- http
- Go常用第三方包
- Go优化
- Go问题排查
- Go框架
- 基础知识点的思考
- 面试题
- 八股文
- 操作系统
- 整理一份资料
- interface
- array
- slice
- map
- MUTEX
- RWMUTEX
- Channel
- waitGroup
- context
- reflect
- gc
- GMP和CSP
- Select
- Docker
- 基本命令
- dockerfile
- docker-compose
- rpc和grpc
- consul和etcd
- ETCD
- consul
- gin
- 一些小点
- 树
- K8s
- ES
- pprof
- mycat
- nginx
- 整理后的面试题
- 基础
- Map
- Chan
- GC
- GMP
- 并发
- 内存
- 算法
- docker