Mycat读写分离的简单实现

article/2025/9/9 7:55:45

文章目录

  • 1、Mycat读写分离的配置
    • 1.1、Mycat是什么
    • 1.2、Mycat能干什么
      • 1.2.1、数据库的读写分离
        • 1.2.1.1、数据库读写分离图解
      • 1.2.2、数据库分库分表
        • 1.2.2.1、水平拆分(分库)
        • 1.2.2.2、垂直拆分(分表)
    • 1.3、Mycat的搭建
      • 1.3.1、前期准备
      • 1.3.2、搭建环境
      • 1.3.3、Mycat的安装启动关闭
      • 1.3.4、Mycat的配置文件
      • 1.3.5、server.xml文件的配置
      • 1.3.6、schema.xml文件的配置
        • 1.3.6.1、schema配置
        • 1.3.6.2、dataNode配置
        • 1.3.6.3、dataHost配置
        • 1.3.6.4、完整配置
    • 1.4、读写分离测试

1、Mycat读写分离的配置

1.1、Mycat是什么

Mycat是一个开源数据库中间件,是一个实现了MySQL协议的的数据库中间件服务器,我们可以把它看作是一个数据库代理,用MySQL客户端工具和命令行访问Mycat,而Mycat再使用用MySQL原生(Native)协议与多个MySQL服务器通信,也可以用JDBC协议与大多数主流数据库服务器通信,包括SQL Server、Oracle、DB2、PostgreSQL等主流数据库,也支持MongoDB这种新型NoSQL方式的存储,未来还会支持更多类型的存储。

1.2、Mycat能干什么

1.2.1、数据库的读写分离

1、通过Mycat可以自动实现写数据时操作主数据库,读数据时操作从数据库,这样能有效地减轻数据库压力,也能减轻IO压力。

2、实现读写分离,当主出现故障后,Mycat自动切换到另一个主上,进而提供高可用的数据库服务,当然我们需要部署多主多从的模式

1.2.1.1、数据库读写分离图解

这里是一主一从的图解
一主一从图解

1.2.2、数据库分库分表

分库分表指的是对数据库数据的拆分,分为两种:水平拆分和垂直拆分

1.2.2.1、水平拆分(分库)

根据表中数据的逻辑关系,将同一个表中的数据按照某种条件拆分到多台数据库服务器上面

1.2.2.2、垂直拆分(分表)

按照不同的表来拆分分到不同的数据库服务器之上,根据表的类型不同来拆分

1.3、Mycat的搭建

1.3.1、前期准备

1、要将Mycat准备好可以去官网下载 http://www.mycat.org.cn/

2、需要两台或者两台以上的服务器或者虚拟机

3、保证每台服务器上已经安装好了mysql并且主从复制已经搭建完成
主从复制搭建可以参考这里:https://blog.csdn.net/qq_45334037/article/details/118708689

1.3.2、搭建环境

主服务器ip:176.20.92.71

从服务器ip:176.20.92.73

Mycat版本:1.6.7.1

MySQL版本:5.7.18

Linux版本:centos7

1.3.3、Mycat的安装启动关闭

1、Mycat解压即用

将Mycat解压到/usr/local目录下

2、启动Mycat 需要切换到Mycat中的bin目录下

./mycat start

3、登录mycat 需要进入mysql中的bin目录下

./mysql -umycat -p -P8066 -h127.0.0.1

4、Mycat的关闭

./mycat stop

1.3.4、Mycat的配置文件

  1. server.xml: 用于配置mycat所需要的服务器信息。常用于配置:
    1、配置序列生成方式
    2、配置mycat逻辑数据库
    3、配置mycat的访问账户和密码
  2. schema.xml: 用于配置的逻辑数据库的映射、表、分片规则、数据结点及真实的数据库信息。常用于配置:
    1、配置逻辑库映射
    2、配置垂直切分的表
    3、配置真实的数据库
    4、配置读写结点
  3. rule.xml: 用于定义分片规则

1.3.5、server.xml文件的配置

只需设置连接mycat时的用户名和密码, 逻辑库即可,将默认的修改为你想要的

	<user name="mycat" defaultAccount="true"><property name="password">123456</property><property name="schemas">mycatdb</property></user>

1.3.6、schema.xml文件的配置

1.3.6.1、schema配置

因为只做读写分离,不做分库分表,Mycat只是帮我们转发一下请求,写转发到主库,读转发到从库,所以schema标签里面不用配置table

配置如下

<schema name="mycatdb" checkSQLschema="false" sqlMaxLimit="100"  dataNode="dn1"></schema>

1.3.6.2、dataNode配置

dataNode标签的作用

dataNode定义了Mycat中的数据节点,也就是我们通常说所的数据分片,一个dataNode标签就是一个独立的数据分片,通俗理解,一个分片就是一个物理数据库

配置如下

<dataNode name="dn1" dataHost="host1" database="testdb" />

name属性:定义数据节点的名字,这个名字需要是唯一的,这个名字在schema里面会使用到

dataHost属性:用于定义该分片属于哪个数据库实例的,属性值是引用dataHost标签上定义的name属性

database属性:用于对应真实的数据库名,必须是真实存在的

1.3.6.3、dataHost配置

dataHost标签的作用

定义具体的数据库实例、读写分离配置和心跳语句

配置如下

	<dataHost name="host1" maxCon="1000" minCon="10" balance="1"writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100"><heartbeat>select user()</heartbeat><writeHost host="hostM1" url="176.20.92.71:3306" user="root" password="123456"><readHost host="hostS1" url="176.20.92.73:3306" user="root" password="123456" /></writeHost></dataHost>

balance属性:负载均衡类型,目前的取值有4种

switchType属性:用于指定主服务器发生故障后的切换类型

heartbeat标签:用于和后端数据库进行心跳检查的语句,检测MySQL数据库是否正常运行

writeHost标签:将后端的数据库的相关配置给mycat,用于实例化后端连接池,写实例

readHost标签:将后端的数据库的相关配置给mycat,用于实例化后端连接池,读实例

在一个dataHost内可以定义多个writeHost和readHost。但是,如果writeHost指定的后端数据库宕机,那么这个writeHost绑定的所有readHost都将不可用。另一方面,由于这个writeHost宕机系统会自动的检测到,并切换到备用的writeHost上去

1.3.6.4、完整配置

<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/"><schema name="mycatdb" checkSQLschema="false" sqlMaxLimit="100"  dataNode="dn1"></schema><dataNode name="dn1" dataHost="host1" database="testdb" /><dataHost name="host1" maxCon="1000" minCon="10" balance="0"writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100"><heartbeat>select user()</heartbeat><writeHost host="hostM1" url="176.20.92.71:3306" user="root" password="123456"><readHost host="hostS1" url="176.20.92.73:3306" user="root" password="123456" /></writeHost></dataHost>
</mycat:schema>

在此我们的mycat读写分离配置就全部完成了,重启mycat进行测试

1.4、读写分离测试

连接mysql
在mycat中的逻辑数据库mycatdb的t_user表中插入数据 可以发现主从数据库都被插入了数据
插入数据
在mycat中查询t_user中的数据
查询
到此mycat读写分离的搭建和测试就全部完成了


http://chatgpt.dhexx.cn/article/vJbc38IS.shtml

相关文章

mycat读写分离配置

为什么使用MyCat 如今随着互联网的发展&#xff0c;数据的量级也是撑指数的增长&#xff0c;从GB到TB到PB。对数据的各种操作也是愈加的困难&#xff0c;传统的关系性数据库已经无法满足快速查询与插入数据的需求。这个时候NoSQL的出现暂时解决了这一危机。它通过降低数…

实现mycat读写分离

前言 众所周知&#xff0c;随着用户量的增多&#xff0c;数据库操作往往会成为一个系统的瓶颈所在&#xff0c;而且一般的系统“读”的压力远远大于“写”&#xff0c;因此我们可以通过实现数据库的读写分离来提高系统的性能。 基础知识 要实现读写分离&#xff0c;就要解决主…

Mycat 读写分离实战

Mycat读写分离实战 一、主从复制搭建 1.实验环境 搭建一主一从的部署架构&#xff0c;master&#xff08;主库&#xff09;运行在阿里云服务器 47.108.136.201&#xff0c;slave&#xff08;从库&#xff09;运行在 IP 地址为 12.168.149.128 的Ubuntu虚拟机中两台机器均安装…

mycat-读写分离

简介&#xff1a; 主从复制的工作机制&#xff1a; ① Master将改变记录到二进制日志&#xff08;binary log&#xff09;中&#xff0c;这些记录叫做二进制日志事件&#xff08;binary log events&#xff09;&#xff1b; ② Slave将master的binary log events拷贝到它的中继…

使用mycat进行读写分离

目录 一、读写分离 1.1、什么是读写分离 1.2、为什么要用读写分离 1.3、使用mycat读写分离 1.3.1安装mycat 1.3.2、配置mycat 简单的理解&#xff0c;mycat就是一个数据中间件&#xff0c;可以让开发人员直接访问mycat&#xff0c;然后由mycat去访问具体的数据库服务器&a…

数据库:mycat实现读写分离

目录 一、mycat 1、mycat实现读写分离原理 2、mycat应用场景 3、mycat作用 4、mycat实现读写分离实战 一、mycat 1、mycat实现读写分离原理 ①用户进行读操作则由mycat转给配置的从数据库。 ②用户进行写操作则由mycat转给配置的主数据库。 ③转发规则由mycat配置文件中…

mycat实现读写分离

1、在本地复制多一个数据库&#xff08;有条件拥有多个服务器的忽略&#xff09; 1&#xff09;找到mysql实例文件夹和数据文件夹&#xff08;通常在C:\Program Files下和C:\ProgramData下&#xff09; 直接都复制一份出来做从库 2&#xff09;修改从库配置my.ini [client]…

汉诺塔递归算法(Python编程)

一、问题描述。 汉诺塔是学习计算机递归算法的经典入门案例&#xff0c;是一个数学难题。其问题为如何将所有圆盘从A移动到C&#xff0c;要求一次只能移动一个盘子&#xff0c;盘子只能在3个标杆&#xff08;A/B/C&#xff09;之间移动&#xff0c;更大的盘子不能放在更小的盘子…

汉诺塔递归调用(C语言实现)

预备知识 1.递归算法 递归算法&#xff1a;是一种直接或者间接地调用自身的算法。在计算机编写程序中&#xff0c;递归算法对解决一大类问题是十分有效的&#xff0c;它往往使算法的描述简洁而且易于理解。 递归过程一般通过函数或子过程来实现。 递归算法的实质&#xff1…

python实现汉诺塔递归算法超详细过程

python实现汉诺塔递归算法 def hanoi(n, x, y, z):if n 1:print(x, -->, z)else:hanoi(n-1, x, z, y)print(x, -->, z)hanoi(n-1, y, x, z)n int(input(请输入层数&#xff1a;)) hanoi(n, x, y, z) if n 1: #如果n等于1时print(x, -->, z) #直接将x移…

多图详解汉诺塔递归实现思路--含实现代码

前言 为了节约大家的时间&#xff0c;本文对汉诺塔的定义就不做赘述了&#xff0c;如果有小伙伴不清楚汉诺塔的规则可以直接点蓝字跳转过去。 本篇博客内容 汉诺塔实现的思路用递归的方式实现汉诺塔 汉诺塔实现的思路 我们先以两个瓷盘为例&#xff1a; 由于小瓷盘1位于顶部&a…

汉诺塔递归算法C++实现

算法介绍 其实算法非常简单&#xff0c;当盘子的个数为n时&#xff0c;移动的次数应等于2^n – 1&#xff08;有兴趣的可以自己证明试试看&#xff09;。后来一位美国学者发现一种出人意料的简单方法&#xff0c;只要轮流进行两步操作就可以了。首先把三根柱子按顺序排成品字型…

汉诺塔递归算法(C语言)

汉诺塔递归算法 一、引言二、解决汉诺塔问题&#xff08;1&#xff09;递归算法 三、C语言实现&#xff08;1&#xff09;代码实现&#xff08;2&#xff09;算法思想 四、结论 一、引言 汉诺塔问题是一个经典的数学谜题&#xff0c;它是在印度流传下来的&#xff0c;传说中有…

汉诺塔递归调用

1.递归算法 递归算法&#xff1a;是一种直接或者间接地调用自身的算法。在计算机编写程序中&#xff0c;递归算法对解决一大类问题是十分有效的&#xff0c;它往往使算法的描述简洁而且易于理解。 递归过程一般通过函数或子过程来实现。 递归算法的实质&#xff1a;是把问题转…

汉诺塔递归的空间复杂度_算法之美:解读递归算法原理和效率

对于很多人来说,都知道递归,也能看的懂递归,但在实际项目过程中,却不知道如何使用递归,这里给递归做个总结。 递归的定义 在数学与计算机科学中,递归(Recursion)是指在函数的定义中使用函数自身的方法。实际上,递归,顾名思义,其包含了两个意思:递和归,这正是递归思想…

汉诺塔递归问题的分析与Python实现

背景 相传在古印度圣庙中&#xff0c;有一种被称为汉诺塔(Hanoi)的游戏。该游戏是在一块铜板装置上&#xff0c;有三根杆(编号A、B、C)&#xff0c;在A杆自下而上、由大到小按顺序放置64个金盘(如图)。游戏的目标&#xff1a;把A杆上的金盘全部移到C杆上&#xff0c;并仍保持原…

汉诺塔递归算法/搬金盘的婆罗门 - Python实现

汉诺塔递归算法/搬金盘的婆罗门 - Python实现 本文引用自作者编写的下述图书; 本文允许以个人学习、教学等目的引用、讲授或转载&#xff0c;但需要注明原作者"海洋饼干叔 叔"&#xff1b;本文不允许以纸质及电子出版为目的进行抄摘或改编。 1.《Python编程基础及应用…

汉诺塔递归的空间复杂度_学习算法绕不开的~~汉诺塔

大家好,我是老郝。本文就汉诺塔问题向大家阐述递归的思想。 【问题描述】 有三根柱子,最左边的柱子上从大到小放着很多的圆盘,要求把圆盘一个一个的放到最右边的柱子上并且只能小盘子压在大盘子上。(据说古代阿三要他们的和尚把64个圆盘从左到右放一遍,看到最后你就知道阿三…

汉诺塔递归的空间复杂度_【干货】Java算法复杂度

同一问题可用不同算法解决&#xff0c;而一个算法的质量优劣将影响到算法乃至程序的效率。算法分析的目的在于选择合适算法和改进算法。 算法复杂度分为时间复杂度和空间复杂度。其作用&#xff1a; 时间复杂度是度量算法执行的时间长短&#xff1b;而空间复杂度是度量算法所需…

汉诺塔递归问题

汉诺塔问题&#xff1a; 这是一道著名的算法题&#xff0c;也是递归思想的典型体现。 可以总结&#xff0c;当圆盘数为n时&#xff0c;将最下层圆盘和其余上部份所有圆盘看作两个整体&#xff0c;则满足以下步骤&#xff1a; 1、把n-1个圆盘从A经过C移动到B 2、把第n个圆盘从…