写点什么

MyCat 教程【安装及配置介绍】

作者:Java高工P7
  • 2021 年 11 月 11 日
  • 本文字数:4025 字

    阅读完需:约 13 分钟

2.2 上传解压安装

将下载的文件上传到/usr/local目录下,并解压


2.3 目录介绍

解压后的目录结构如下:



| 目录 | 描述 |


| --- | :-- |


| bin | 目录里是启动脚本 |


| conf | 目录里是配置文件 |


| catlet | 为 Mycat 的一个扩展功能 |


| lib | 目录里是 Mycat 和它的依赖 jar |


| logs | 目录里是 console.log 用来保存控制台日志,和 mycat.log 用来保存 mycat 的 log4j 日志 |


二、相关配置文件介绍


=========================================================================


Mycat 的架构其实很好理解,Mycat是代理,Mycat 后面就是物理数据库。和 Web 服务器的 Nginx 类似。对于使用者来说,访问的都是 Mycat,不会接触到后端的数据库。



注意:MyCat 的主要配置文件都在conf目录下。我们给大家来介绍下介个核心的配置文件


| 配置文件 | 说明 |


| --- | :-- |


| server.xml | MyCat 的配置文件,设置账号、参数等 |


| schema.xml | MyCat 对应的物理数据库和数据库表的配置 |


| rule.xml | MyCat 分片(分库分表)规则 |


2.1 server.xml




server.xml是用来配置账号,参数及相关操作权限的文件,下面是给文件的简要内容,去掉了相关的注释


<?xml version="1.0" encoding="UTF-8"?>


<!DOCTYPE mycat:server SYSTEM "server.dtd">


<mycat:server xmlns:mycat="http://io.mycat/">


<system>


<property name="useSqlStat">0</property>


<property name="useGlobleTableCheck">0</property>


<property name="sequnceHandlerType">2</property>


<property name="processorBufferPoolType">0</property>


<property name="handleDistributedTransactions">0</property>


<property name="useOffHeapForMerge">1</property>


<property name="memoryPageSize">1m</property>


<property name="spillsFileBufferSize">1k</property>


<property name="useStreamOutput">0</property>


<property name="systemReserveMemorySize">384m</property>


<property name="useZKSwitch">true</property>


</system>


<!--


<firewall>


<whitehost>


<host host="127.0.0.1" user="mycat"/>


<host host="127.0.0.2" user="mycat"/>


</whitehost>


<blacklist check="false">


</blacklist>


</firewall>


-->


<user name="root">


<property name="password">123456</property>


<property name="schemas">TESTDB</property>


<!--


<privileges check="false">


<schema name="TESTDB" dml="0110" >


<table name="tb01" dml="0000"></table>


<table name="tb02" dml="1111"></table>


</schema>


</privileges>


-->


</user>


<user name="user">


<property name="password">user</property>


<property name="schemas">TESTDB</property>


<property name="readOnly">true</property>


</user>


</mycat:server>


system标签中设置的是系统级别的相关参数,参考源文件中的注释即可能看懂,初始默认即可


user标签是我们要注意的地方。 Mycat 中的用户,用户可以访问的逻辑库,可以访问的逻辑表,服务的端口号等


说明:上面的默认的配置表示 创建的有两个用户rootuser账号


root 账号,密码是123456,对应的逻辑库是 TESTDB


user 账号,密码是user,对应的逻辑库是 TESTDB,权限是只读


注释掉的privileges 表示root用户的操作权限


| 参数 | 说明 | 事例 |


| --- | --- | --- |


| dml | insert,update,select,delete | 0000 |


dml 权限顺序为:insert(新增),update(修改),select(查询),delete(删除),0000–> 1111,0 为禁止权限,1 为开启权限


2.2 schema.xml




schema.xml 是最主要的配置文件,首先看默认的配置文件


<?xml version="1.0"?>


<!DOCTYPE mycat:schema SYSTEM "schema.dtd">


<mycat:schema xmlns:mycat="http://io.mycat/">


<schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100">


<table name="travelrecord" dataNode="dn1,dn2,dn3" rule="auto-sharding-long" />


<table name="company" primaryKey="ID" type="global" dataNode="dn1,dn2,dn3" />


【一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义】
浏览器打开:qq.cn.hn/FTf 免费领取
复制代码


<table name="goods" primaryKey="ID" type="global" dataNode="dn1,dn2" />


<table name="hotnews" primaryKey="ID" autoIncrement="true" dataNode="dn1,dn2,dn3" rule="mod-long" />


<table name="employee" primaryKey="ID" dataNode="dn1,dn2" rule="sharding-by-intfile" />


<table name="customer" primaryKey="ID" dataNode="dn1,dn2" rule="sharding-by-intfile">


<childTable name="orders" primaryKey="ID" joinKey="customer_id" parentKey="id">


<childTable name="order_items" joinKey="order_id" parentKey="id" />


</childTable>


<childTable name="customer_addr" primaryKey="ID" joinKey="customer_id" parentKey="id" />


</table>


</schema>


<dataNode name="dn1" dataHost="localhost1" database="db1" />


<dataNode name="dn2" dataHost="localhost1" database="db2" />


<dataNode name="dn3" dataHost="localhost1" database="db3" />


<dataHost name="localhost1" maxCon="1000" minCon="10" balance="0"


writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">


<heartbeat>select user()</heartbeat>


<writeHost host="hostM1" url="localhost:3306" user="root"


password="123456">


<readHost host="hostS2" url="192.168.1.200:3306" user="root" password="xxx" />


</writeHost>


<writeHost host="hostS1" url="localhost:3316" user="root"


password="123456" />


</dataHost>


</mycat:schema>

2.2.1 主要节点介绍

在配置文件中可以定义读写分离,逻辑库,逻辑表,dataHost,dataNode 等信息.


| 节点 | 描述 |


| --- | :-- |


| schema | 配置逻辑库,name 与 server.xml 中 schema 对应 |


| dataNode | 定义数据节点的标签,也就是分库相关配置 |


| dataHost | 物理数据库,真正存储数据的数据库 |

2.2.2 节点及相关属性介绍

2.2.2.1 schema

属性 name


逻辑库名称


属性 checkSQLschema


是否检测 SQL 语法中的 schema 信息. 如: Mycat 逻辑库名称 A, dataNode 名称 B


SQL : select * from A.table;


checkSQLschema 值是 true, Mycat 发送到数据库的 SQL 是 select * from table;


checkSQLschema 只是 false,Mycat 发送的数据库的 SQL 是 select * from A.table;


属性 sqlMaxLimit


Mycat 在执行 SQL 的时候,如果 SQL 语句中没有 limit 子句.自动增加 limit 子句. 避免一次


性得到过多的数据,影响效率. limit 子句的限制数量默认配置为 100.如果 SQL 中有具体的 limit


子句,当前属性失效.


SQL : select * from table . mycat 解析后: select * from table limit 100


SQL : select * from table limit 10 . mycat 不做任何操作修改.


标签 table


定义逻辑表的标签


属性 name


逻辑表名


属性 dataNode


数据节点名称. 即物理数据库中的 database 名称.多个名称使用逗号分隔.


属性 rule


分片规则名称.具体的规则名称参考 rule.xml 配置文件.

2.2.2.2 dataNode

属性 name


数据节点名称, 是定义的逻辑名称,对应具体的物理数据库 database


属性 dataHost


引用 dataHost 标签的 name 值,代表使用的物理数据库所在位置和配置信息.


属性 database


在 dataHost 物理机中,具体的物理数据库 database 名称.

2.2.2.3 dataHost

属性 name


定义逻辑上的数据主机名称


属性 maxCon/minCon


最大连接数, max connections


最小连接数, min connections


属性 dbType


数据库类型 : mysql 数据库


属性 dbDriver


数据库驱动类型, native,使用 mycat 提供的本地驱动.


dataHost 子标签 writeHost


写数据的数据库定义标签. 实现读写分离操作.


属性 host


数据库命名


属性 url


数据库访问路径


属性 user


数据库访问用户名


属性 password


访问用户密码


writeHost 子标签 readHost


属性 host


数据库命名


属性 url


数据库访问路径


属性 user


数据库访问用户名


属性 password


2.3 rule.xml




用于定义分片规则的配置文件。mycat 默认的分片规则: 以 500 万为单位,实现分片规则.逻辑库 A 对应 dataNode - db1 和 db2. 1-500 万保存在 db1 中, 500 万零 1 到 1000 万保存在 db2 中,1000 万零 1 到 1500 万保存在 db1 中.依次类推.


<?xml version="1.0" encoding="UTF-8"?>


<!-- - - Licensed under the Apache License, Version 2.0 (the "License");


  • you may not use this file except in compliance with the License. - You


may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0


  • Unless required by applicable law or agreed to in writing, software -


distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT


WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the


License for the specific language governing permissions and - limitations


under the License. -->


<!DOCTYPE mycat:rule SYSTEM "rule.dtd">


<mycat:rule xmlns:mycat="http://io.mycat/">


<tableRule name="rule1">


<rule>


<columns>id</columns>


<algorithm>func1</algorithm>


</rule>


</tableRule>


<tableRule name="rule2">


<rule>


<columns>user_id</columns>


<algorithm>func1</algorithm>


</rule>


</tableRule>


<tableRule name="sharding-by-intfile">


<rule>


<columns>sharding_id</columns>


<algorithm>hash-int</algorithm>


</rule>


</tableRule>


<tableRule name="auto-sharding-long">


<rule>


<columns>id</columns>


<algorithm>rang-long</algorithm>


</rule>


</tableRule>


<tableRule name="mod-long">


<rule>


<columns>id</columns>


<algorithm>mod-long</algorithm>


</rule>


</tableRule>


<tableRule name="sharding-by-murmur">


<rule>


<columns>id</columns>


<algorithm>murmur</algorithm>


</rule>


</tableRule>


<tableRule name="crc32slot">


<rule>


<columns>id</columns>


<algorithm>crc32slot</algorithm>


</rule>


</tableRule>


<tableRule name="sharding-by-month">


<rule>

用户头像

Java高工P7

关注

还未添加个人签名 2021.11.08 加入

还未添加个人简介

评论

发布
暂无评论
MyCat教程【安装及配置介绍】