备案 控制台
开发者社区 开发与运维 文章 正文

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

简介: 本文我们来介绍下MyCat的安装和相关的配置文件的介绍

本文我们来介绍下MyCat的安装和相关的配置文件的介绍


一、安装MyCat


1.安装准备环境


1.1 安装JDK


 因为mycat是java开发的,所以需要java虚拟机环境,在Linux节点中安装JDK是必须的。

20191016095730697.png


1.2 放开相关端口


 在主从节点上都放开对端口3306的访问,或者直接关闭防火墙。

# 临时关闭
service iptables stop
service iptables start
# 永久关闭
chkconfig iptables on
chkconfig iptables off
# 查看防火墙状态
service iptables status


1.3 root账号


 mycat是我们的数据库中间件,那么mycat必然要能够访问对应的主从数据库,所以在主从数据库中我们需要分别创建访问的账号。

grant all privileges on *.* to 'root'@'%' identified by '123456' with grant option;
flush privileges;


2.安装mycat


2.1 下载安装软件


官网地址: http://www.mycat.io/


20191016100048202.png


2.2 上传解压安装


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


20191016100412235.gif


2.3 目录介绍


 解压后的目录结构如下:

20191016100505145.png

目录 描述
bin 目录里是启动脚本
conf 目录里是配置文件
catlet 为 Mycat 的一个扩展功能
lib 目录里是 Mycat 和它的依赖 jar
logs 目录里是 console.log 用来保存控制台日志,和 mycat.log 用来保存 mycat 的 log4j日志



二、相关配置文件介绍


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


20191016101858935.png


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

配置文件 说明
server.xml MyCat 的配置文件,设置账号、参数等
schema.xml MyCat 对应的物理数据库和数据库表的配置
rule.xml MyCat 分片(分库分表)规则


2.1 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>
  <!-- 全局SQL防火墙设置 -->
  <!-- 
  <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>
    <!-- 表级 DML 权限设置 -->
    <!--    
    <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 中的用户,用户可以访问的逻辑库,可以访问的逻辑表,服务的端口号等

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

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

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


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

参数 说明 事例
dml insert,update,select,delete 0000



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" />
    <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.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>
      <columns>create_time</columns>
      <algorithm>partbymonth</algorithm>
    </rule>
  </tableRule>
  <tableRule name="latest-month-calldate">
    <rule>
      <columns>calldate</columns>
      <algorithm>latestMonth</algorithm>
    </rule>
  </tableRule>
  <tableRule name="auto-sharding-rang-mod">
    <rule>
      <columns>id</columns>
      <algorithm>rang-mod</algorithm>
    </rule>
  </tableRule>
  <tableRule name="jch">
    <rule>
      <columns>id</columns>
      <algorithm>jump-consistent-hash</algorithm>
    </rule>
  </tableRule>
  <function name="murmur"
    class="io.mycat.route.function.PartitionByMurmurHash">
    <property name="seed">0</property><!-- 默认是0 -->
    <property name="count">2</property><!-- 要分片的数据库节点数量,必须指定,否则没法分片 -->
    <property name="virtualBucketTimes">160</property><!-- 一个实际的数据库节点被映射为这么多虚拟节点,默认是160倍,也就是虚拟节点数是物理节点数的160倍 -->
    <!-- <property name="weightMapFile">weightMapFile</property> 节点的权重,没有指定权重的节点默认是1。以properties文件的格式填写,以从0开始到count-1的整数值也就是节点索引为key,以节点权重值为值。所有权重值必须是正整数,否则以1代替 -->
    <!-- <property name="bucketMapPath">/etc/mycat/bucketMapPath</property> 
      用于测试时观察各物理节点与虚拟节点的分布情况,如果指定了这个属性,会把虚拟节点的murmur hash值与物理节点的映射按行输出到这个文件,没有默认值,如果不指定,就不会输出任何东西 -->
  </function>
  <function name="crc32slot"
        class="io.mycat.route.function.PartitionByCRC32PreSlot">
    <property name="count">2</property><!-- 要分片的数据库节点数量,必须指定,否则没法分片 -->
  </function>
  <function name="hash-int"
    class="io.mycat.route.function.PartitionByFileMap">
    <property name="mapFile">partition-hash-int.txt</property>
  </function>
  <function name="rang-long"
    class="io.mycat.route.function.AutoPartitionByLong">
    <property name="mapFile">autopartition-long.txt</property>
  </function>
  <function name="mod-long" class="io.mycat.route.function.PartitionByMod">
    <!-- how many data nodes -->
    <property name="count">3</property>
  </function>
  <function name="func1" class="io.mycat.route.function.PartitionByLong">
    <property name="partitionCount">8</property>
    <property name="partitionLength">128</property>
  </function>
  <function name="latestMonth"
    class="io.mycat.route.function.LatestMonthPartion">
    <property name="splitOneDay">24</property>
  </function>
  <function name="partbymonth"
    class="io.mycat.route.function.PartitionByMonth">
    <property name="dateFormat">yyyy-MM-dd</property>
    <property name="sBeginDate">2015-01-01</property>
  </function>
  <function name="rang-mod" class="io.mycat.route.function.PartitionByRangeMod">
          <property name="mapFile">partition-range-mod.txt</property>
  </function>
  <function name="jump-consistent-hash" class="io.mycat.route.function.PartitionByJumpConsistentHash">
    <property name="totalBuckets">3</property>
  </function>
</mycat:rule>


简化版

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mycat:rule SYSTEM "rule.dtd">
<mycat:rule xmlns:mycat="http://io.mycat/">
  <tableRule name="mod-long">
    <rule>
      <columns>id</columns>
      <algorithm>mod-long</algorithm>
    </rule>
  </tableRule>
  <function name="mod-long" class="io.mycat.route.function.PartitionByMod">
    <!-- how many data nodes -->
    <property name="count">3</property>
  </function>
</mycat:rule>


由上我们可以发现在rule.xml文件中,核心的标签就两个tableRule 和function,我们分别来介绍下


2.3.1 tableRule


 是用来声明table的分片规则的,相关属性及标签的含义如下


截屏2021-12-03 上午10.25.32.png

algorithm 使用 function 标签中的 name 属性。连接表规则和具体分片算法。 table 标签内使用。让逻辑表使用这个规则进行分片

2.3.2 function


 指定分片规则的算法的具体实现

节点 描述
name 指定算法的名字
class 制定分片算法具体的类名字
property 为具体算法需要用到的一些属性


游客a74jvhcp7vclg
目录
相关文章
童小纯
|
1月前
|
SQL 关系型数据库 MySQL
Mycat【Mycat部署安装(核心配置及目录结构、安装以及管理命令详解)Mycat高级特性(读写分离概述、搭建读写分离、MySQL双主双从原理)】(三)-全面详解(学习总结---从入门到深化)
Mycat【Mycat部署安装(核心配置及目录结构、安装以及管理命令详解)Mycat高级特性(读写分离概述、搭建读写分离、MySQL双主双从原理)】(三)-全面详解(学习总结---从入门到深化)
童小纯
109 0
bqospzg5rfs7g
|
存储 Oracle 前端开发
MyCat-简介-MyCat 的使用场合及下载 | 学习笔记
快速学习 MyCat-简介-MyCat 的使用场合及下载
bqospzg5rfs7g
255 0
MyCat-简介-MyCat 的使用场合及下载 | 学习笔记
simba1949
|
Linux 网络安全 数据库
MyCat下载与安装
MyCat下载与安装
simba1949
2611 0
渐暖
|
1月前
|
SQL 缓存 关系型数据库
【Mycat】mycat综述(附安装配置)
【Mycat】mycat综述(附安装配置)
渐暖
48 0
程序媛地瓜
|
10月前
|
关系型数据库 MySQL Linux
零基础搭建Mycat环境
零基础搭建Mycat环境
程序媛地瓜
80 0
bqospzg5rfs7g
|
SQL 运维 监控
MyCat - 高级 - MyCat-Web 介绍及安装配置 | 学习笔记
快速学习 MyCat - 高级 - MyCat-Web 介绍及安装配置
bqospzg5rfs7g
802 0
MyCat - 高级 - MyCat-Web 介绍及安装配置 | 学习笔记
阿里云博主-阿演
|
11月前
|
关系型数据库 MySQL 中间件
mysql 中间件 mycat2 的详细安装及配置步骤
右上角下载里面有个文件下载服务,点进去发现无法访问
阿里云博主-阿演
610 0
chengfengpolang
|
负载均衡 关系型数据库 MySQL
Mycat需要安装在哪台服务器?
Mycat需要安装在哪台服务器?
chengfengpolang
131 0
bqospzg5rfs7g
|
存储 Java 中间件
MyCat-入门-环境搭建-MyCat 安装 | 学习笔记
快速学习 MyCat-入门-环境搭建-MyCat 安装
bqospzg5rfs7g
136 0
MyCat-入门-环境搭建-MyCat 安装 | 学习笔记
bqospzg5rfs7g
|
存储 关系型数据库 MySQL
MyCat-入门-环境搭建-MySQL 安装配置 | 学习笔记
快速学习 MyCat-入门-环境搭建-MySQL 安装配置
bqospzg5rfs7g
155 0
MyCat-入门-环境搭建-MySQL 安装配置 | 学习笔记

热门文章

最新文章

  • 1
    优酷中后台前端解决方案-总览
  • 2
    流计算风云再起 - PostgreSQL携PipelineDB力挺IoT(物联网), 大幅提升性能和开发效率
  • 3
    PyODPS 安装常见问题解决
  • 4
    redis4.0之Lua脚本新姿势
  • 5
    iOS开发-plist文件增删改查
  • 6
    基于OHCI的USB主机 —— UFI数据结构3
  • 7
    RAW+ASM 的RAC 安装文档
  • 8
    23亿美元大市场,NFV做好了准备吗?
  • 9
    排查Java高CPU占用原因
  • 10
    【我们都爱Paul Hegarty】斯坦福IOS8公开课个人笔记20 Multiple MVCs 多MVC模式、NavigationController导航控制器
  • 1
    探索Linux命令idn:处理国际化域名
    21
  • 2
    性能监控之常见 Java Heap Dump 方法
    21
  • 3
    深入解析Linux命令id:理解用户身份与权限
    18
  • 4
    算法金 | 选择最佳机器学习模型的 10 步指南
    22
  • 5
    ChatGPT 1岁:创新、争议和AI产生突破的一年
    19
  • 6
    修复来自开源和遗留程序的旧的、不安全的代码的三种方法
    15
  • 7
    GenAI安全:如何防止Microsoft Copilot发生数据泄露
    16
  • 8
    CSS进阶-CSS动画关键帧
    19
  • 9
    让IT领导者彻夜难眠的10件事
    17
  • 10
    CSS进阶-3D变换与透视效果
    14
  • 相关课程

    更多
  • MySQL数据库入门学习
  • MySQL实战进阶
  • 全面讲解开源数据库中间件MyCat使用及原理(一)
  • 全面讲解开源数据库中间件MyCat使用及原理(二)
  • 全面讲解开源数据库中间件MyCat使用及原理(三)
  • 全面讲解开源数据库中间件MyCat使用及原理(四)
  • 相关电子书

    更多
  • MySQL Java开发实战
  • 《玩转MongoDB 从入门到实战》
  • MySQL 开发规约实战
  • 相关实验场景

    更多
  • 5分钟上手Flink MySQL连接器
  • 云端MySQL的安装及应用
  • MongoDB数据库入门
  • 下一篇
    2024年阿里云免费云服务器及学生云服务器申请教程参考

    聚圣源姓杨的怎么起名男幻想曹操传2隐藏英雄密码狐狸阶梯kankantoptop官方下载安装博客起名字五行带火女孩名字大全带火属性女宝宝起名男人的高氏起名斗牛游戏lsasecretsview1.21女孩起名测试打分结果office2010破解版下载鼠年卞姓女孩起名林姓的男孩起名超母体退化2012年属龙起名字大全免费起 名字区块链起名起厂子名超级灵气无弹窗女孩梓配什么字起名字好听整蛊专家粤语生化王朝2梦见死去的母亲cf调烟雾头盔宫心计1好看的都市言情小说婴儿起名免费取名舞台灯光设计www.che168.com淀粉肠小王子日销售额涨超10倍罗斯否认插足凯特王妃婚姻让美丽中国“从细节出发”清明节放假3天调休1天男孩疑遭霸凌 家长讨说法被踢出群国产伟哥去年销售近13亿网友建议重庆地铁不准乘客携带菜筐雅江山火三名扑火人员牺牲系谣言代拍被何赛飞拿着魔杖追着打月嫂回应掌掴婴儿是在赶虫子山西高速一大巴发生事故 已致13死高中生被打伤下体休学 邯郸通报李梦为奥运任务婉拒WNBA邀请19岁小伙救下5人后溺亡 多方发声王树国3次鞠躬告别西交大师生单亲妈妈陷入热恋 14岁儿子报警315晚会后胖东来又人满为患了倪萍分享减重40斤方法王楚钦登顶三项第一今日春分两大学生合买彩票中奖一人不认账张家界的山上“长”满了韩国人?周杰伦一审败诉网易房客欠租失踪 房东直发愁男子持台球杆殴打2名女店员被抓男子被猫抓伤后确诊“猫抓病”“重生之我在北大当嫡校长”槽头肉企业被曝光前生意红火男孩8年未见母亲被告知被遗忘恒大被罚41.75亿到底怎么缴网友洛杉矶偶遇贾玲杨倩无缘巴黎奥运张立群任西安交通大学校长黑马情侣提车了西双版纳热带植物园回应蜉蝣大爆发妈妈回应孩子在校撞护栏坠楼考生莫言也上北大硕士复试名单了韩国首次吊销离岗医生执照奥巴马现身唐宁街 黑色着装引猜测沈阳一轿车冲入人行道致3死2伤阿根廷将发行1万与2万面值的纸币外国人感慨凌晨的中国很安全男子被流浪猫绊倒 投喂者赔24万手机成瘾是影响睡眠质量重要因素春分“立蛋”成功率更高?胖东来员工每周单休无小长假“开封王婆”爆火:促成四五十对专家建议不必谈骨泥色变浙江一高校内汽车冲撞行人 多人受伤许家印被限制高消费

    聚圣源 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化