🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
[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&timestamp=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)