数据库中间件Mycat介绍详解

数据库中间件Mycat介绍详解1 Mycat 介绍 1 1 什么是 Mycat1 2 使用 Mycat 后的结构图 1 3 为什么要用 Mycat 1 4 Mycat 能干什么 1 4 1 读写分离 1 4 2 数据分片 1 4 3 多数据源整合 1 5 Mycat 原理 1 6 默认端口 1 7 MySQL 主从模式搭建实例 重 1 7 1 基于 Docker 的 MySQL 主从复制搭建 1 7 1 1 拉取 MySQL5 7 镜像文件 1 7 1 2 创建和启动主从容器 1 7 1 3 配置 Master 主 1 7 1 4 配置 Slave 从

下一篇: Mycat安装与启动

1. Mycat介绍

1.1. 什么是Mycat

Mycat 是基于Java语言编写的数据库中间件
Mycat也是基于阿里开源的Cobar产品而研发,具有稳定性,可靠性。
其核心功能就是分库分表,配合数据库的主从模式还可以实现读写分离。
Mycat官网:http://www.Mycat.org.cn/
Mycat下载:http://dl.Mycat.org.cn/
注:互联网大多数应用的性能瓶颈都是数据库的瓶颈,数据库要承担大量的数据交互。特别是我们的数据库还是关系型数据库,性能比较差,大数据量下性能还是非常差。(十万级别数据性能)













1.2. 使用Mycat后的结构图

在这里插入图片描述

1.3. 为什么要用Mycat?

  • Java与数据库紧耦合;
  • 高访问量高并发对数据库的压力;
  • 读写请求数据不一致。



1.4. Mycat能干什么?

1.4.1. 读写分离

原理: 需要搭建主从模式,让主数据库(Master)处理事务性增、删、改操作(INSERT、DELETE、UPDATE),而从数据库(Slave)处理查询(SELECT)操作。
Mycat配合数据库本身的复制功能,可以解决读写分离的问题。
在这里插入图片描述




1.4.2. 数据分片

1.4.3. 多数据源整合

在这里插入图片描述

1.5. Mycat原理

Mycat 的原理中最重要的一个动词是“拦截”,它拦截了用户发送过来的 SQL 语句,首先对 SQL语句做了一些特定的分析:如分片分析、路由分析、读写分离分析、缓存分析等,然后将此 SQL 发往后端的真实数据库,并将返回的结果做适当的处理,最终再返回给用户。
原理:
应用向Mycat发送SQL, Mycat拦截SQL,经过各种分析,然后发给相应的数据源进行处理。
数据源将处理结果再响应给Mycat,Mycat经过各种处理,最后响应给应用。





在这里插入图片描述
上图分析:
(1)应用向Mycat发送查询orders订单的SQL,条件是prov=zhejiang。
(2)Mycat经过条件分析查找满足条件的数据源dn1。
(3)dn1处理完SQL后,将处理结果响应给Mycat,Mycat再经过处理响应给应用。












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



1.6. 默认端口

1.7. MySQL主从模式搭建实例(重)

1.7.1. 基于Docker的MySQL主从复制搭建

为什么基于Docker搭建?

  • 资源有限;
  • 虚拟机搭建对机器配置有要求,并且安装MySQL步骤繁琐;
  • 一台机器上可以运行多个Docker容器;
  • Docker容器之间相互独立,有独立IP,互不冲突;
  • Docker使用步骤简单,启动容器在秒级别。



1.7.1.1. 拉取MySQL 5.7镜像文件
docker pull mysql:5.7 
1.7.1.2. 创建和启动主从容器

设置目录:
为了使MySQL的数据保持在宿主机上,先建立数据库存储目录:

mkdir -pv /root/docker/mysql/data 

建立主服务器的配置目录

mkdir -pv /root/docker/mysql/data/master 

建立从服务器的配置目录

mkdir -pv /root/docker/mysql/data/slave 

Master(主):

docker run -p 3306:3306 --name mysql-master -e MYSQL_ROOT_PASSWORD= -d mysql:5.7 

Slave(从):

docker run -p 3307:3306 --name mysql-slave -e MYSQL_ROOT_PASSWORD= -d mysql:5.7 

注: Master对外映射的端口是3306,Slave对外映射的端口是3307。因为Docker容器是相互独立的,每个容器有其独立的IP,所以不同容器使用相同的端口并不会冲突。这里我们应该尽量使用MySQL默认的3306端口,否则可能会出现无法通过IP连接Docker容器内MySQL的问题。

开放3306端口:

firewall-cmd --zone=public --add-port=3306/tcp --permanent firewall-cmd --reload 

测试:
Docker ps查看主从MySQL,并用Navicat等工具测试连接主从MySQL。
在这里插入图片描述




1.7.1.3. 配置Master(主)

进入主容器:

docker exec -it mysql-master /bin/bash 

切换到/etc/mysql目录下

cd /etc/mysql 

对my.cnf进行编辑

vi my.cnf 

此时会报出bash: vi: command not found,需要我们在docker容器内部自行安装vim。

apt-get install vim 

在这里插入图片描述
需要先执行 apt-get update命令,这个命令的作用是:同步/etc/apt/sources.list和/etc/apt/sources.list.d中列出的源的索引,这样才能获取到最新的软件包。
在这里插入图片描述
再执行apt-get install vim,就可以安装vim了:
在这里插入图片描述
在my.cnf中添加如下配置:










[mysqld] server-id=100  同一局域网内要唯一,且要小于Slave的server_id log-bin=mysql-bin  开启二进制日志功能,可以随便取(关键),会生成一个 

mysql-bin.000001的日志文件,Slave就是来读取该日志文件进行同步。

重启服务:
配置完成之后,需要重启MySQL服务使配置生效。

systemctl restart mysqld 

或者

service mysql restart 

在这里插入图片描述

重启mysql服务时会使得docker容器停止,我们还需要启动容器

docker start mysql-master 

对Slave授权同步
在Master数据库创建数据同步用户,授予用户slave的REPLICATION SLAVE权限和REPLICATION CLIENT权限(必须吗?),用于在主从库之间同步数据。
#创建slave用户及密码




CREATE USER 'slave'@'%' IDENTIFIED BY ''; 

#授权

GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%'; 

#二合一

GRANT REPLICATION SLAVE ON *.* TO 'slave'@'%' IDENTIFIED BY ''; 
1.7.1.4. 配置Slave(从)

和配置Master(主)一样,在Slave配置文件my.cnf中添加如下配置:

[mysqld] server-id=101  设置server_id,且要大于主库的server_id,注意要唯一  log-bin=mysql-slave-bin  开启二进制日志功能,以备Slave作为其它Slave的Master时使用  relay-log=edu-mysql-relay-bin  relay_log配置中继日志  
1.7.1.5. 链接Master(主)和Slave(从)

(1)在Master进入mysql,执行:

show master status; 

在这里插入图片描述
说明:File和Position字段的值后面将会用到,在后面的操作完成之前,需要保证Master库不能做任何操作,否则将会引起状态变化,File和Position字段的值变化。

(2)在Slave中进入mysql,执行:

change master to master_host='192.168.26.130', master_user='slave', master_password='', master_port=3306, master_log_file='mysql-bin.000001', master_log_pos= 2830, master_connect_retry=30; 

简化:

change master to master_host='192.168.186.129', master_user='slave', master_password='', master_log_file='mysql-bin.000001'; 

在这里插入图片描述
说明:
master_host=‘192.168.26.130’ 对应主库地址
master_user=‘slave’ 访问主库的用户名
master_password=‘123456’ 密码
master_port=3306 端口号
master_log_file=‘mysql-bin.000002’ 读取的日志文件(对应Master主机中的日志文件












命令说明:
master_host :Master的地址,指的是容器的独立ip,可以通过docker inspect
–format=‘{
{.NetworkSettings.IPAddress}}’ 容器名称|容器id查询容器的ip
master_port:Master的端口号,指的是容器的端口号
master_user:用于数据同步的用户
master_password:用于同步的用户的密码
master_log_file:指定 Slave 从哪个日志文件开始复制数据,即上文中提到的 File 字段的值
master_log_pos:从哪个 Position 开始读,即上文中提到的 Position 字段的值
master_connect_retry:如果连接失败,重试的时间间隔,单位是秒,默认是60秒。
















(3)在Slave 中的mysql终端执行:

show slave status \G; #查看主从同步状态,\G格式 
1.7.1.6.主从复制排错

使用start slave;开启主从复制过程后,如果SlaveIORunning一直是Connecting,则说明主从复制一直处于连接状态,这种情况一般是下面几种原因造成的,我们可以根据Last_IO_Error提示予以排除。

  • 网络不通——检查ip,端口
  • 密码不对——检查是否创建用于同步的用户和用户密码是否正确
  • pos不对——检查Master的 Position

注意:
如果在排错中出现Error错误是UUIDs错误,则表示主从UUIDs是相同的,最大可能性就是文件是复制的,所以产生的UUIDs是相同的。
解决:先退出mysql,再编辑:vim /var/lib/mysql/auto.cnf,修改里面的编码即可。






1.7.1.7. 测试主从复制

1.7.2. 准备:在Master主库和Slave从库都需要完成

  • 防火墙都开放3306端口;(或关闭防火墙)
    #将3306加入防火墙

firewall-cmd --zone=public --add-port=3306/tcp --permanent 

#关闭防火墙

systemctl stop firewalld; 
  • 保证root用户可以被Mycat访问(给权限);
  • 在Mycat中通过Master主库的root用户访问Master主库。
Grant all privileges on *.* to ‘root’@’%’ identified by ‘root’ with grant option; Flush privileges; 

下一篇:Mycat安装与启动






版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/223751.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月17日 下午1:29
下一篇 2026年3月17日 下午1:29


相关推荐

  • 首批“政务龙虾”上线:OpenClaw爆火背后,AI Agent为什么突然彻底出圈了?

    首批“政务龙虾”上线:OpenClaw爆火背后,AI Agent为什么突然彻底出圈了?

    2026年3月13日
    3
  • 进程调度与进程切换_模式切换和进程切换有什么区别

    进程调度与进程切换_模式切换和进程切换有什么区别从今天开始,我们将要开启一个新的系列【闪耀计划】,没错!这是今年上半年的一整个系列计划!本专题目的是通过百天刷题计划,通过题目和知识点串联的方式,完成对计算机操作系统的复习和巩固;同时还配有专门的笔记总结和文档教程哦!想要搞定,搞透计算机操作系统的同学,本专栏将会通过模块化的分类,刷够1000道题,为大家提供点对点的考点相关知识轰炸!值得注意的是,本专栏将会通过教程+课后习题的方式来进行巩固教学,课后习题的题量也是算入总题数的哦!

    2022年10月20日
    6
  • python精彩编程200例 pdf-Python程序设计 第3版pdf「建议收藏」

    Python程序设计第3版内容简介《Python程序设计第3版》是面向大学计算机科学专业的教材。本书以Python语言为工具,采用相当传统的方法,强调解决问题、设计和编程是计算机科学的核心技能。全书共13章,此外,还包含两个附录。第1章到第5章介绍计算机与程序、编写简单程序、数字计算、对象和图形、字符串处理等基础知识。第6章到第8章介绍函数、判断结构、循环结构和布尔值等话题。第9章到第1…

    2022年4月6日
    118
  • Div滚动条定位设置「建议收藏」

    Div滚动条定位设置「建议收藏」1.div<divid="DataDiv"style="overflow-x:hidden;overflow-y:scroll;max-height:500px;">//数据</div>2.通过JS去设置Div滚动条的位置document.getElementById(‘DataDiv’).scrollTop//Div滚动条的垂直位置设置属性…

    2022年7月12日
    20
  • databus mysql搭建_【databus】初识Databus

    databus mysql搭建_【databus】初识Databus1.简介Databus是一个低延迟、可靠的、支持事务的、保持一致性的数据变更抓取系统。由LinkedIn于2013年开源。Databus通过挖掘数据库日志的方式,将数据库变更实时、可靠的从数据库拉取出来,业务可以通过定制化client实时获取变更并进行其他业务逻辑。Databus有以下特点:数据源和消费者之间的隔离。数据传输能保证顺序性和至少一次交付的高可用性。从变化流的任意时间点进行消费,包括…

    2022年10月16日
    9
  • flask_migrate数据库迁移遇到的问题

    flask_migrate数据库迁移遇到的问题

    2021年11月23日
    40

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号