从 01 开始 从 01 开始
首页
  • 📚 计算机基础

    • 计算机简史
    • 数字电路
    • 计算机组成原理
    • 操作系统
    • Linux
    • 计算机网络
    • 数据库
    • 编程工具
    • 装机
  • 🎨 前端

    • Node
  • JavaSE
  • Java 高级
  • JavaEE

    • 构建、依赖管理
    • Ant
    • Maven
    • 日志框架
    • Junit
    • JDBC
    • XML-JSON
  • JavaWeb

    • 服务器软件
    • 环境管理和配置管理-科普篇
    • Servlet
  • Spring

    • Spring基础
  • 主流框架

    • Redis
    • Mybatis
    • Lucene
    • Elasticsearch
    • RabbitMQ
    • MyCat
    • Lombok
  • SpringMVC

    • SpringMVC 基础
  • SpringBoot

    • SpringBoot 基础
  • Windows 使用技巧
  • 手机相关技巧
  • 最全面的输入法教程
  • 最全面的浏览器教程
  • Office
  • 图片类工具
  • 效率类工具
  • 最全面的 RSS 教程
  • 码字工具
  • 各大平台
  • 校招
  • 五险一金
  • 职场规划
  • 关于离职
  • 杂谈
  • 自媒体
  • 📖 读书

    • 读书工具
    • 走进科学
  • 🌍 英语

    • 从零开始学英语
    • 英语兔的相关视频
    • Larry 想做技术大佬的相关视频
  • 🏛️ 政治

    • 新闻合订本
    • 反腐
    • GFW
    • 404 内容
    • 审查与自我审查
    • 互联网
    • 战争
    • 读书笔记
  • 💰 经济

    • 关于税
    • 理财
  • 💪 健身

    • 睡眠
    • 皮肤
    • 口腔健康
    • 学会呼吸
    • 健身日志
  • 🏠 其他

    • 驾驶技能
    • 租房与买房
    • 厨艺
  • 电影

    • 电影推荐
  • 电视剧
  • 漫画

    • 漫画软件
    • 漫画推荐
  • 游戏

    • Steam
    • 三国杀
    • 求生之路
  • 小说
  • 关于本站
  • 关于博主
  • 打赏
  • 网站动态
  • 友人帐
  • 从零开始搭建博客
  • 搭建邮件服务器
  • 本站分享
  • 🌈 生活

    • 2022
    • 2023
    • 2024
    • 2025
  • 📇 文章索引

    • 文章分类
    • 文章归档

晓林

程序猿,自由职业者,博主,英语爱好者,健身达人
首页
  • 📚 计算机基础

    • 计算机简史
    • 数字电路
    • 计算机组成原理
    • 操作系统
    • Linux
    • 计算机网络
    • 数据库
    • 编程工具
    • 装机
  • 🎨 前端

    • Node
  • JavaSE
  • Java 高级
  • JavaEE

    • 构建、依赖管理
    • Ant
    • Maven
    • 日志框架
    • Junit
    • JDBC
    • XML-JSON
  • JavaWeb

    • 服务器软件
    • 环境管理和配置管理-科普篇
    • Servlet
  • Spring

    • Spring基础
  • 主流框架

    • Redis
    • Mybatis
    • Lucene
    • Elasticsearch
    • RabbitMQ
    • MyCat
    • Lombok
  • SpringMVC

    • SpringMVC 基础
  • SpringBoot

    • SpringBoot 基础
  • Windows 使用技巧
  • 手机相关技巧
  • 最全面的输入法教程
  • 最全面的浏览器教程
  • Office
  • 图片类工具
  • 效率类工具
  • 最全面的 RSS 教程
  • 码字工具
  • 各大平台
  • 校招
  • 五险一金
  • 职场规划
  • 关于离职
  • 杂谈
  • 自媒体
  • 📖 读书

    • 读书工具
    • 走进科学
  • 🌍 英语

    • 从零开始学英语
    • 英语兔的相关视频
    • Larry 想做技术大佬的相关视频
  • 🏛️ 政治

    • 新闻合订本
    • 反腐
    • GFW
    • 404 内容
    • 审查与自我审查
    • 互联网
    • 战争
    • 读书笔记
  • 💰 经济

    • 关于税
    • 理财
  • 💪 健身

    • 睡眠
    • 皮肤
    • 口腔健康
    • 学会呼吸
    • 健身日志
  • 🏠 其他

    • 驾驶技能
    • 租房与买房
    • 厨艺
  • 电影

    • 电影推荐
  • 电视剧
  • 漫画

    • 漫画软件
    • 漫画推荐
  • 游戏

    • Steam
    • 三国杀
    • 求生之路
  • 小说
  • 关于本站
  • 关于博主
  • 打赏
  • 网站动态
  • 友人帐
  • 从零开始搭建博客
  • 搭建邮件服务器
  • 本站分享
  • 🌈 生活

    • 2022
    • 2023
    • 2024
    • 2025
  • 📇 文章索引

    • 文章分类
    • 文章归档
  • JavaSE

  • JavaSenior

  • JavaEE

  • JavaWeb

  • Spring

  • 主流框架

    • Redis

    • Mybatis

    • Lucene

    • Elasticsearch

    • MQ

    • MyCat

      • MyCat2-尚硅谷
      • MyCat 是什么,为什么要用
        • 是什么
        • 官网地址
        • 能干什么
        • 原理
        • 新旧版本对比
      • 搭建环境
      • MyCat 概念
      • MyCat 的配置文件
      • 一主一从复制
      • 一主一从读写分离
      • 双主双从复制方案
      • 分库分表
      • MyCat安全设置
      • Mycat2-UI
    • Lombok

  • SpringMVC

  • SpringBoot

  • Java
  • 主流框架
  • MyCat
2023-06-28
目录

MyCat 是什么,为什么要用

# 10.MyCat 是什么,为什么要用

介绍下 MyCat ‍ ‍

# 第一章 入门概述

# 是什么

Mycat 是数据库中间件。

先说说什么是中间件:中间件是一类连接软件组件和应用的计算机软件,以便于软件各部件之间的沟通。例子:web 中间件(Tomcat,Nginx 等),消息中间件。

数据库中间件:连接 Java 应用程序和数据库

为什么要用 Mycat?首先我们来看没有 MyCat 时的情况:

  • Java 与数据库紧耦合。如果搭建集群,查询用这个库,写用另一个库,也是紧耦合。
  • 高访问量高并发对数据库的压力。
  • 读写请求数据不一致。比如有些系统是读请求多,写请求少(例如在商城经常需要浏览商品,最后才下单)

而如果用了 MyCat 呢?

  • 有了 MyCat,Java 应用就不用担心数据库配置了 ,只需访问 MyCat 即可。
  • 搭建 MySQL 集群,例如 3 个
  • 指定某一台 MySQL 写,其他数据库同步

相当于 MyCat 是一个逻辑数据库,对于 Java 应用来说,只有一个数据源,就比如 Nginx 分发给多台主机 ‍ 数据库中间件对比

  • Cobar 属于阿里 B2B 事业群,始于 2008 年,在阿里服役 3 年多,接管 3000+个 MySQL 数据库的 schema, 集群日处理在线 SQL 请求 50 亿次以上。由于 Cobar 发起人的离职,Cobar 停止维护。
  • Mycat 是开源社区在阿里 cobar 基础上进行二次开发,解决了 cobar 存在的问题,并且加入了许多新的功能在其中。青出于蓝而胜于蓝。官网:http://www.mycat.org.cn/
  • OneProxy 基于 MySQL 官方的 proxy 思想利用 c 进行开发的,OneProxy 是一款商业收费的中间件,不开源。舍弃了一些功能,专注在性能和稳定性上。
  • kingshard 由小团队用 go 语言开发,还需要发展,需要不断完善。
  • Vitess 是 Youtube 生产在使用,架构很复杂。不支持 MySQL 原生协议,使用需要大量改造成本。
  • Atlas 是 360 团队基于 mysql proxy 改写,功能还需完善,高并发下不稳定。
  • MaxScale 是 mariadb(MySQL 原作者维护的一个版本) 研发的中间件
  • MySQLRoute 是 MySQL 官方 Oracle 公司发布的中间件
  • ...... ‍

# 官网地址

官网:MyCat2 (opens new window)

GitHub:MyCATApache/Mycat (opens new window)

Gitee:Mycat2 (opens new window) ‍

# 能干什么

1、读写分离。当访问量大的时候,一台数据库不足以支撑,此时可以再搭建一个数据库,由 2 台数据库提供访问;但只有一台主机提供写请求(避免两个数据库的数据不一致):

如果主机挂了怎么办?可以再搭建一个主从,实现双主双从结构。首先搭建单主单从,后续再搭建双主双从:

‍

2、数据分片

当一个表,数据达到千万级别,查询效率会变的很低;此时我们可以拆分该表:

  • 垂直拆分:分库,每一个库分别存不同的表
  • 水平拆分:将一个表拆分成几个表
  • 垂直+水平拆分:分库分表

拆分后,如果在 Java 程序里去指定该查询哪个库的哪个表,那么是也太不方便了,而且是紧耦合。这时我们可以使用 MyCat 中间件。

3、多数据源整合。

有时候我们不仅仅会用到一种数据源,有时候还会使用 Redis、Mongodb 等;此时我们也可以使用 MyCat,针对不同的请求使用,由 MyCat 分发给对应的数据源。

比如关键数据用多主,常规数据用主从切换,一些只存储一段时间的日志类数据等

# 原理

MyCat 功能这么强大,它的原理很复杂吗?MyCat 的原理中最重要的一个动词是 "拦截",它拦截了用户发送过来的 SQL 语句,然后对 SQL 语句做了一些特定的分析:如分片分析、路由分析、读写分离分析、缓存分析等,然后将此 SQL 发往后端的真实数据库,并将返回的结果做适当的处理,最终再返回给用户。

比如我们用了分表技术,根据 prov 字段差分了 3 个库,如果我要查询 zhejiang 的数据,MyCat 就会去查询 DB1:

这种方式把数据库的分布式从代码中解耦出来,程序员察觉不出来后台使用 Mycat 还是 MySQL。

# 新旧版本对比

MyCat2 和之前的版本对比如下(内容来自官网文档 Mycat1.x 与 Mycat2 功能对比 (opens new window)):

功能 1.6 2
多语句 不支持 支持
blob 值 支持一部分 支持
全局二级索引 不支持 支持
任意跨库 join(包含复杂查询) catlet 支持 支持
分片表与分片表 JOIN 查询 ER 表支持 支持
关联子查询 不支持 支持一部分
分库同时分表 不支持 支持
存储过程 支持固定形式的 支持更多
支持逻辑视图 不支持 支持
支持物理视图 支持 支持
批量插入 不支持 支持
执行计划管理 不支持 支持
路由注释 支持 支持
集群功能 支持 支持更多集群类型
自动 hash 分片算法 不支持 支持
支持第三方监控 支持 mycat-web 支持普罗米斯, kafka 日志等监控
流式合拼结果集 支持 支持
范围查询 支持 支持
单表映射物理表 不支持 支持
XA 事务 弱 XA 支持, 事务自动恢复
..... ..... .....
上次更新: 2025/6/3 09:31:54
MyCat2-尚硅谷
搭建环境

← MyCat2-尚硅谷 搭建环境→

最近更新
01
新闻合订本 2025-10
10-31
02
2025 年 10 月记
10-30
03
用 AI 批量优化思源笔记排版
10-15
更多文章>
Theme by Vdoing | Copyright © 2022-2025 | 粤 ICP 备 2022067627 号 -1 | 粤公网安备 44011302003646 号 | 点击查看十年之约
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式