MySQL-Mycat读写分离

article/2025/9/9 2:32:56

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

MySQL-Mycat读写分离

  • 一、读写分离
        • 1.什么是读写分离
        • 2.读写分离的好处
      • Mycat是什么?
        • 架构
      • 部署环境
      • 部署mycat
        • 补充
      • 启动mycat
        • 启动报错
      • 测试
      • 客户端连接报错
  • 总结原理及思路


一、读写分离

1.什么是读写分离

在数据库集群架构中,让主库负责处理写入操作,而从库只负责处理select查询,让两者分工明确达到提高数据库整体读写性能。当然,主数据库另外一个功能就是负责将数据变更同步到主库中,也就是写操作。

2.读写分离的好处

1.分摊服务器压力,提高机器的系统处理效率

2.在写入不变,大大分摊了读取,提高了系统性能。另外,当读取被分摊后,有间接提高了写入的性能。所以,总体的性能提高了。

3.增加冗余,提高服务可用性,当一台数据库服务器宕机后可以调整另外一台从库以最快速度恢复服务。

Mycat是什么?

mycat是数据库中间件,mycat是一个开源的数据库系统,但是由于真正的数据库需要存储引擎,但是mycat没有,所以mycat并不是真正的数据库系统。
mycat是数据库中间件,就是介于数据库与应用之间,进行数据处理与交互的中间服务是实现对主从数据库的读写分离、读的负载均衡(合理分配)。

MyCAT 是使用 JAVA 语言进行编写开发,使用前需要先安装 JAVA 运行环境(JRE),由于 MyCAT 中使用了 JDK7 中的一些特性,所以要求必须在 JDK7 以上的版本上运行。

架构

在这里插入图片描述
在这里插入图片描述

部署环境

安装jdk

[root@mycat ~]# tar xzf jdk-8u221-linux-x64.tar.gz -C /usr/local/
[root@mycat ~]# cd /usr/local/
[root@mycat local]# mv jdk1.8.0_221/ java 
设置环境变量
[root@mycat local]# vim /etc/profile  #添加如下内容,
JAVA_HOME=/usr/local/java
PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
[root@mycat local]# source /etc/profile
[root@mycatlocal]# java -version
java version "1.8.0_211"
Java(TM) SE Runtime Environment (build 1.8.0_211-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.211-b12, mixed mode)

部署mycat

[root@mycat ~]# tar xf Mycat-server-1.6.5-release-20180122220033-linux.tar.gz -C /usr/local/

认识配置文件
MyCAT 目前主要通过配置文件的方式来定义逻辑库和相关配置:
/usr/local/mycat/conf/server.xml 前端–研发人员需要的信息
定义用户以及系统相关变量,如端口等。其中用户信息是前端应用程序连接 mycat 的用户信息。
/usr/local/mycat/conf/schema.xml 后端–管理的是真实的数据库情况。
定义逻辑库,表、分片节点等内容。

配置server.xml
#vim server.xml

下面的用户和密码是应用程序连接到 MyCat 使用的.schemas 配置项所对应的值是逻辑数据库的名字,这个名字需要和后面 schema.xml 文件中配置的一致。- name指的是虚拟用户名,password指的是虚拟密码,schemas指的是虚拟库的名字,其中schemas里面的virtualdb需要schemas.xml里面的对应.

<!DOCTYPE mycat:server SYSTEM "server.dtd">
<mycat:server xmlns:mycat="http://io.mycat/"><user name="virtual"><property name="password">Qf@123456</property><property name="schemas">virtualdb</property></user>
</mycat:server>

在这里插入图片描述
配置 schema.xml文件
vim schema.xm
database指的是真实的数据库平台名字,dataHost要和后面dataHost标签名称对应
balance 必须了解,这是mycat的负载均衡算法的模式
心跳检测,用于检测后端数据库是否正常

<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/"><schema name="virtualdb"  checkSQLschema="false"  sqlMaxLimit="100"  dataNode="dn1"></schema><dataNode name="dn1"  dataHost="localhost1" database="db1" /><dataHost name="localhost1" maxCon="1000" minCon="10"  balance="3"writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100"><heartbeat>select user()</heartbeat><!-- can have multi write hosts --><writeHost host="mysql-master" url="192.168.37.133:3306" user="root"  password="Qf@123456"><!-- can have multi read hosts --><readHost host="mysql-slave" url="192.168.37.135:3306" user="root" password="Qf@123456" /></writeHost></dataHost>
</mycat:schema>

在这里插入图片描述

补充

balance 属性
负载均衡类型,目前的取值有 3 种:
1. balance="0", 不开启读写分离机制,所有读操作都发送到当前可用的 writeHost 上。
2. balance="1", 全部的 readHost 与  writeHost 参与 select 语句的负载均衡,简单的说,当双主双从模式(M1->S1,M2->S2,并且 M1 与 M2 互为主备),正常情况下,M2,S1,S2 都参与 select 语句的负载均衡。
3. balance="2", 所有读操作都随机的在 writeHost、readhost 上分发。
4. balance="3", 所有读请求随机的分发到 wiriterHost 对应的 readhost 执行,writerHost 不负担读压力, #注意 balance=3 只在 1.4 及其以后版本有,1.3 没有。writeType 属性
负载均衡类型
1. writeType="0", 所有写操作发送到配置的第一个 writeHost,第一个挂了切换到还生存的第二个writeHost,重新启动后已切换后的为准.
2. writeType="1",所有写操作都随机的发送到配置的 writeHost,#版本1.5 以后废弃不推荐。

启动mycat

[root@mycat ~]# /usr/local/mycat/bin/mycat  start
支持一下参数
start | restart |stop | status
[root@mycat conf]# /usr/local/mycat/bin/mycat start     #需要稍微等待一会
Starting Mycat-server...
[root@mycat ~]# jps   #查看mycat是否启动
13377 WrapperSimpleApp
13431 Jps
[root@mycat ~]# netstat -lntp | grep java

启动报错

1.如果没有起来查看是否是server.xml与schema.xml文件中的虚拟库名是否对应
2.查看log日志,/usr/local/mycat/logs/wrapper.log日志,查看哪里报错
3.其次好好查看对应的配置文件

测试

在 mycat 的机器上测试用户权限有效性
测试是否能正常登录上 主服务器

mysql -uroot -p'Qf@123456' -h192.168.62.153

继续测试是否能登录上从服务器

mysql -uroot -p'Qf@123456' -h192.168.62.152

通过客户端进行测试是否能登录到 mycat 上
192.168.37.130 是 mycat 的主机地址
注意端口号是 8066

[root@mysqlclient ~]# mysql -uvirtual -pQf@123456 -h192.168.37.130 -P 8066
MySQL [(none)]> show databases;
+----------+
| DATABASE |
+----------+
| testdb |
+----------+
1 row in set (0.00 sec)

主要是测试是否互通

继续测试读写分离策略

使用 mysql 客户端工具使用 mycat 的账户和密码登录 mycat , 之后执行 select 语句。
之后查询 mycat 主机上 mycat 安装目录下的 logs/mycat.log 日志。
在日志重搜索查询的语句或者查询 从库的 ip 地址,应该能搜索到。

客户端连接报错

1.如果连接进去了,说明mycat没问题
2.如果use virtualdb 进入数据库的时候卡住了,后端数据库和虚拟数据库没有对应
3.如果发现输入的内容可以查看到,可能是balance不是正常的读写分离模式,也可能是从库的配置异常。
4.如果show database 卡住了,可能是防火墙或者后端数据库无法连接问题.

总结原理及思路

在使用虚拟用户登录,登录到mycat主机上,如果没有做主从复制,那么在虚拟库中创建的表是没有办法在从库中查看到,因为从库起到一个分担读的压力,没有主从复制,主库就没能将数据复制给从库,所以查看不到,如果做了主从复制,那么就可以在从库中访问到。

在mycat中创建相当于是虚拟库连接了主服务器的数据库进行创建,访问查看,相当于连接从服务器的数据库进行访问查看。


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

相关文章

读写分离时mycat不能链接mysql_Mycat读写分离配置实践

Mycat读写分离配置实践 发布时间&#xff1a;2020-08-16 01:08:20 来源&#xff1a;ITPUB博客 阅读&#xff1a;81 作者&#xff1a;jeanron100 工作这些年来&#xff0c;也去了一些地方&#xff0c;有了一些见闻&#xff0c;隐隐感觉很多文化和猫有着千丝万缕的联系。就拿IT行…

Mycat读写分离的简单实现

文章目录 1、Mycat读写分离的配置1.1、Mycat是什么1.2、Mycat能干什么1.2.1、数据库的读写分离1.2.1.1、数据库读写分离图解 1.2.2、数据库分库分表1.2.2.1、水平拆分&#xff08;分库&#xff09;1.2.2.2、垂直拆分&#xff08;分表&#xff09; 1.3、Mycat的搭建1.3.1、前期准…

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个圆盘从左到右放一遍,看到最后你就知道阿三…