当前位置: 首页 > news >正文

数据库进阶教学——读写分离(Mycat1.6+Ubuntu22.04主+Win10从)

目录

1、概述

2、环境准备

3、读写分离实验

3.1、安装jdk

3.2、安装Mycat

3.3、配置Mycat

3.3.1、配置schema.xml

​​​​3.3.2、配置server.xml

3.4、修改主从机远程登陆权限

3.4.1、主机

3.4.2、从机

3.5、启动Mycat

3.6、登录Mycat

3.7、验证


1、概述

  • 读写分离就是把对数据库的读和写操作分开,以对应不同的数据库服务器。主数据库提供写操作,从数据库提供读操作,这样能有效地减轻单台数据库的压力。
  • 通过MyCat即可轻易实现上述功能。
    • 【注】Mycat是一个开源数据库中间件,是一个实现了MySQL协议的的数据库中间件服务器,我们可以把它看作是一个数据库代理,用MySQL客户端工具和命令行访问Mycat,而Mycat再使用用MySQL原生协议与多个MySQL服务器通信,也可以用JDBC协议与大多数主流数据库服务器通信,包括SQL Server、Oracle、DB2、PostgreSQL等主流数据库,也支持MongoDB这种新型NoSQL方式的存储,未来还会支持更多类型的存储。
  • 下面为一主一从的图解: 
    • eda2b420b8b147f4a07cd2ac14fc9938.png

2、环境准备

  • 主机:阿里云服务器Ubuntu22.04
  • 从机:本地电脑Win10
  • Mycat1.6(从机Win10上)
  • java环境:jdk1.8
  • 数据库:Mysql8.0.34
  • 读写分离是基于主从复制的,如何搭建主从复制可以看这篇文章:数据库进阶教学——主从复制(Ubuntu22.04主+Win10从)-CSDN博客
  • 搭建好主从复制环境后,在从机中查看主从复制信息,显示如下。
    • bb27ede2c7f847c6bda79f91a91a44fc.png

3、读写分离实验

3.1、安装jdk

  • 使用mycat是需要java环境的,先查看本地电脑上是否安装了java环境。
    • 【注】mycat1.6需要的jdk版本不能太新,不然会报错!用jdk1.8就行。
    • db7366db292643e1a50ff985e3f947fd.png
  • 我这已经安装好了,没有安装的可以参考:超详细JDK1.8安装与配置_jdk1.8安装教程及环境变量配置-CSDN博客

3.2、安装Mycat

  • 理论上,应该将Mycat安装在一个独立的服务器上,然后配置Mycat与主库和从库建立连接,通过Mycat提供的读写分离配置,将读操作分发到从库,将写操作分发到主库。
  • 这里为了方便,直接在本地电脑(从库)上安装Mycat。Mycat资源:Win10安装Mycat_mycat windows-CSDN博客(不知道为啥官网打不开)。
    • 【注】因为我的本地电脑没有外网,所以mycat只能装在我的本地电脑中。如果装在服务器上,它将不能访问我的本地电脑。而我的本地电脑是可以访问服务器的。
  • 【注】下面是在Win10中安装Mycat。
  • 下载压缩包并解压。
    • 2e8aae4dbdcf473d9d819c415fe22815.png
  • 配置环境变量:
    • 新增环境变量MYCAT_HOME,配置mycat的根目录。
      • 03034b48e4134bb18ea1514b6b4ded18.png
    • 新增Path变量。
      • %MYCAT_HOME%\bin
      • d7480c32ea9c463f86114244aff16bea.png
  • 修改配置文件mycat/conf/wrapper.conf 
    • # 添加java路径
      wrapper.java.command=D:\App\Java\jdk-1.8\
      wrapper.java.command=%JAVA_HOME%/bin/java.exe# 修改内存
      wrapper.java.additional.10=-Xmx4G
      wrapper.java.additional.11=-Xms1G
      改为:
      wrapper.java.additional.10=-Xmx512M
      wrapper.java.additional.11=-Xms64M
    • 019e0191d0484436be31eab2d3715d18.png
    • a7f8d251779b495c91c88c3cc1054f93.png

3.3、配置Mycat

3.3.1、配置schema.xml
  • Mycat控制后台数据库的读写分离和负载均衡由schema.xml文件datahost标签的balance属性控制。
  • balance参数值:
    • 0:不开启读写分离机制,所有读操作都发送到当前可用的writeHost上。
    • 1:全部的readHost与备用的writeHost都参与select语句的负载均衡(主要针对于双主双从模式)。
    • 2:所有的读写操作都随机在writeHost,readHost上分发。
    • 3:所有的读请求随机分发到writeHost对应的readHost上执行,writeHost不负担读压力。
  • schema.xml位置:
    • 555cd570f1854166a031ccaa1bbd6d91.png
  • 选择要实现读写分离的数据库,要在文件中修改对应的名字。
    • 7ffeed5dd29f4ce3b1b83d36399f0db5.png
    • <?xml version="1.0"?>
      <!DOCTYPE mycat:schema SYSTEM "schema.dtd">
      <mycat:schema xmlns:mycat="http://io.mycat/"><schema name="MASTER_RW" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1"></schema><!-- <dataNode name="dn1$0-743" dataHost="localhost1" database="db$0-743"/> --><dataNode name="dn1" dataHost="localhost1" database="db01" /><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="master" url="123.56.xxx.xxx:3306" user="root" password="root">		   <readHost host="slave" url="127.0.0.1:3306" user="root" password="root"/></writeHost></dataHost></mycat:schema>
  • 重点关注以下几个参数:
    • 1d08e747fb75488481cbc05149983f0c.png
​​​​3.3.2、配置server.xml
  • server.xml的位置。
    • 555cd570f1854166a031ccaa1bbd6d91.png
  • 修改逻辑库。
    • <!--以下设置为应用访问帐号权限 -->
      <user name="root" defaultAccount="true"><property name="password">root</property>  # mycat登录密码<property name="schemas">MASTER_RW</property>
      </user>
      <!--以下设置为应用只读帐号权限 -->
      <user name="user"><property name="password">user</property><property name="schemas">MASTER_RW</property><property name="readOnly">true</property>
      </user>

3.4、修改主从机远程登陆权限

  • mycat需要通过权限访问主库和从库。 
3.4.1、主机
  • 进入数据库,输入命令:
    • update user set host='%' where user = 'root';
      flush privileges;  # 刷新权限
    • 4fce220b498f46bab857f7fca3387358.png
3.4.2、从机
  •  进入数据库,输入命令:
    • update user set host='%' where user = 'root';
      flush privileges;  # 刷新权限
    • 27e9f2ec8571467380841f8e5940660d.png

3.5、启动Mycat

  • 以管理员打开终端,进入 mycat/bin,启动mycat。
    • mycat.bat start
    • 启动失败:
      • 0980566c276c49ca8335c8ad3bdeaa65.png
      • 查看日志文件wrapper.log。
        • b4058967cf904822866280b9e924f495.png
        • f592bc3ee3ff4356b86f454af0c5252d.png
    • 解决办法:
      • 修改配置文件mycat/conf/wrapper.conf
      • bd6a4ef6525a439b8596873d84b4df05.png
  • 再次启动,成功。
    • 4ef4a17cd13c410da5a7d2c5554425bc.png

3.6、登录Mycat

  • 使用终端登录mycat。
    • mysql -u root -p -h127.0.0.1 -P8066
    • aaf3c30521234076bf1deab05fac8b6b.png
  • 登录成功,查看其中的数据。
    • c118c3029470466fa40fb7f14c3e1763.png fb75057e237b401fa023a0999ba9ca9f.png e4ee054985fc47c38f61e2e65f9d2586.png

3.7、验证

  • 在mycat的终端插入一条数据。 
    • insert into tb_user(id,name,sex) values(4,'master',0);
  • 查看主库的数据,已经插入了新数据。
    • 4c6b0e379f92488c92ab8f4184308315.png

  • 查看从库的数据,并没有插入新数据。
    • 2f19de07f5fc42b1902db2b652af53b2.png
    • 说明插入操作是在主库中进行的。
  • 【注】这是因为主从复制和读写分离配置的都是3306端口,使用了读写分离后,主从复制就会失效。只需要用完读写分离后,再打开主从复制即可。
  • 在mycat中执行查询操作。
    • c082b72ca37f4aceb8fc8af644d4fc21.png
    • 查询到的数据与从库一致,说明查询操作是在从库中进行的
  • 重新开启主从复制。在从库的数据库中执行下列命令:
    • stop slave;
      set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
      start slave;
      show replica status\G;
    • 2b9d02fef9b24375a9455f5f4d8164c9.png
    • bb27ede2c7f847c6bda79f91a91a44fc.png

  • 查看从库数据,已经与主库保持一致。
    • 5e1eac1929fc4e1bb139eb05568f6a59.png
  • 再次在mycat中执行查询操作。
    • 4973c08d77cb462799e747286c1a545c.png
  • 验证完毕。

相关文章:

数据库进阶教学——读写分离(Mycat1.6+Ubuntu22.04主+Win10从)

目录 1、概述 2、环境准备 3、读写分离实验 3.1、安装jdk 3.2、安装Mycat 3.3、配置Mycat 3.3.1、配置schema.xml ​​​​3.3.2、配置server.xml 3.4、修改主从机远程登陆权限 3.4.1、主机 3.4.2、从机 3.5、启动Mycat 3.6、登录Mycat 3.7、验证 1、概述 读写分…...

MidJourney笔记(9)-daily_theme-docs-describe

/daily_theme 切换 #daily-theme 频道更新的通知。 但我发现在对话框那里,是没有这个命令的: 但官网是有介绍,不知道是不是版本问题还是这个命令已经无效。 但后来,我发现这个命令是要在Midjourney服务对话框那里才有,在我们后面添加的Mid...

鸿蒙 - arkTs:网络请求封装和使用

1. module.json5文件配置网络请求 {"module": {"requestPermissions": [{"name": "ohos.permission.INTERNET"}]} } 2. 在pages同级创建一个文件夹&#xff0c;起名为api 3. api文件夹下创建index.ts文件&#xff0c;文件内容&…...

多功能演示工具ProVideoPlayer2 mac特色介绍

ProVideoPlayer2 mac是用于大多数任何生产的首选多功能演示工具。ProVideoPlayer 2是一种动态视频播放和处理媒体服务器&#xff0c;可将视频映射&#xff08;包括播放和实时视频输入&#xff09;实时控制到一个或多个输出。包括实时效果&#xff0c;调度&#xff0c;网络同步和…...

java设计模式学习之【责任链模式】

文章目录 引言责任链模式简介定义与用途实现方式 使用场景优势与劣势在Spring框架中的应用日志示例代码地址 引言 在现实生活中&#xff0c;常常会遇到这样的场景&#xff1a;一个请求或命令需要经过多个层级的处理。例如&#xff0c;一个行政审批流程可能需要通过多个部门的审…...

docker 安装可视化工具 Protainer 以及 汉化

一、创建保存数据的卷 安装网址&#xff1a;Install Portainer BE with Docker on Linux - Portainer Documentation docker pull portainer/portainer二、根据portainer镜像创建容器 docker run -d -p 8000:8000 -p 9000:9000\ --name portainer --restartalways \ -v /var/r…...

【SpringBoot篇】详解Bean的管理(获取bean,bean的作用域,第三方bean)

文章目录 &#x1f354;Bean的获取&#x1f384;注入IOC容器对象⭐代码实现&#x1f6f8;根据bean的名称获取&#x1f6f8;根据bean的类型获取&#x1f6f8;根据bean的名称和类型获取 &#x1f384;Bean的作用域⭐代码实现&#x1f388;注意 &#x1f384;第三方Bean⭐代码实现…...

彭涛:2023年终复盘,工作,团队,个人!

眨眼2023即将结束&#xff0c;2024即将开启&#xff0c;每年这个时候&#xff0c;都会简单总结下自己这一年&#xff0c;既是对今年的一个复盘和回顾&#xff0c;也是对新一年的向往和期待。 我的2023年&#xff0c;大概分为 「个人」&#xff0c;「家庭」&#xff0c;「团队」…...

【数据结构和算法】---二叉树(2)--堆的实现和应用

目录 一、堆的概念及结构二、堆结构的实现2.1堆向下调整算法2.2堆向上调整算法2.3删除堆顶元素2.4插入元素2.5其他函数接口 三、堆结构的应用3.1堆排序3.2Top-k问题 四、堆概念及结构相关题目 一、堆的概念及结构 如果有一个数字集合&#xff0c;并把它的所有元素按完全二叉树…...

【大模型实践】基于文心一言的对话模型设计

文心一言&#xff08;英文名&#xff1a;ERNIE Bot&#xff09;是百度全新一代知识增强大语言模型&#xff0c;文心大模型家族的新成员&#xff0c;能够与人对话互动、回答问题、协助创作&#xff0c;高效便捷地帮助人们获取信息、知识和灵感。文心一言从数万亿数据和数千亿知识…...

聊聊PowerJob的StoreStrategy

序 本文主要研究一下PowerJob的StoreStrategy StoreStrategy tech/powerjob/worker/common/constants/StoreStrategy.java Getter AllArgsConstructor public enum StoreStrategy {DISK("磁盘"),MEMORY("内存");private final String des; }StoreStra…...

HTML+CSS+JS网页设计期末课程大作业 web课程设计 web前端开发 网页规划与设计

HTMLCSSJS网页设计期末课程大作业 web前端开发技术 web课程设计 网页规划与设计 &#x1f4a5; 文章目录一、&#x1f6a9; 网站描述二、&#x1f38c; 网站介绍三、&#x1f3f4; 网站类型A 个人博客主题B 人物明星主题C 旅游主题D 游戏主题E 动漫主题F 美食主题G 校园主题H 企…...

vscode | python | remote-SSH | Debug 配置 + CLIP4Clip实验记录

安装Extension 本地安装Remote-SSH、python 远程服务器上安装Python 难点&#xff1a;主机和远程服务器上安装Python扩展失败&#xff0c;可能是网络、代理等原因导致解决方法&#xff1a; 主机在官方网站下载Python扩展&#xff1a;https://marketplace.visualstudio.com/it…...

【Linux】实现windows主机与ubuntu虚拟机系统之间文件/字符复制粘贴

环境 硬件&#xff1a;通用PC 系统&#xff1a;Ubuntu 18.04 《 》Windows10 软件 &#xff1a;VMware Workstation 16 Pro 解决 0、现象 使用Ubuntu 虚拟机时&#xff0c;有时需要来回复制文件或者字符串到主机或虚拟机。 1、分析 2、思路 3、解决 //先安装open-vm-to…...

Ubuntu22.04-安装后Terminal无法调出

参考&#xff1a; Ubuntu20.04 终端打开不了的问题排查_ubuntu终端打不开-CSDN博客 https://blog.csdn.net/u010092716/article/details/130968032 Ubuntu修改locale从而修改语言环境_ubuntu locale-CSDN博客 https://blog.csdn.net/aa1209551258/article/details/81745394 问…...

ffmpeg两种windows版本区别说明

版本一 必须拷贝exe和dll文件才能使用&#xff0c;如果缺少dll则exe不正正常执行 如果缺少dll &#xff0c;执行 exe会报错如下 版本2 直接拷贝exe就能使用&#xff0c;没有依赖的环境...

最新国内AI绘画Midjourney绘画提示词Prompt分享

一、Midjourney绘画工具 SparkAi创作系统是基于ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统&#xff0c;支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美&#xff0c;可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如何搭…...

ChatGPT4.0(中文版)国内无限制免费版(附网址)

ChatGPT&#xff0c;由OpenAI开发的人工智能语言模型。它是你的数字对话伙伴&#xff0c;无论你有何问题或需要什么帮助&#xff0c;它都能提供有用的信息。 经过不断的研发和更新&#xff0c;ChatGPT的性能和功能得到了显著提升。现在&#xff0c;我们将重点介绍ChatGPT的两个…...

模拟电路基础知识笔记,你想知道的都有,建议收藏!

大家总说模电知识总是学不会&#xff0c;IC修真院为大家整理了模拟电子基础知识&#xff0c;看看你掌握了多少&#xff0c;文末可以获取全部哦。 文末可领全部文档 1、PN结是晶体二极管的基本结构&#xff0c;也是一般半导体器件的核心。 2、 射极输出器没有电压放大能力&am…...

【强化学习】基于蒙特卡洛MC与时序差分TD的简易21点游戏应用

1. 本文将强化学习方法&#xff08;MC、Sarsa、Q learning&#xff09;应用于“S21点的简单纸牌游戏”。 类似于Sutton和Barto的21点游戏示例&#xff0c;但请注意&#xff0c;纸牌游戏的规则是不同且非标准的。 2. 为方便描述&#xff0c;过程使用代码截图&#xff0c;文末附链…...

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …...

测试微信模版消息推送

进入“开发接口管理”--“公众平台测试账号”&#xff0c;无需申请公众账号、可在测试账号中体验并测试微信公众平台所有高级接口。 获取access_token: 自定义模版消息&#xff1a; 关注测试号&#xff1a;扫二维码关注测试号。 发送模版消息&#xff1a; import requests da…...

装饰模式(Decorator Pattern)重构java邮件发奖系统实战

前言 现在我们有个如下的需求&#xff0c;设计一个邮件发奖的小系统&#xff0c; 需求 1.数据验证 → 2. 敏感信息加密 → 3. 日志记录 → 4. 实际发送邮件 装饰器模式&#xff08;Decorator Pattern&#xff09;允许向一个现有的对象添加新的功能&#xff0c;同时又不改变其…...

聊聊 Pulsar:Producer 源码解析

一、前言 Apache Pulsar 是一个企业级的开源分布式消息传递平台&#xff0c;以其高性能、可扩展性和存储计算分离架构在消息队列和流处理领域独树一帜。在 Pulsar 的核心架构中&#xff0c;Producer&#xff08;生产者&#xff09; 是连接客户端应用与消息队列的第一步。生产者…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院挂号小程序

一、开发准备 ​​环境搭建​​&#xff1a; 安装DevEco Studio 3.0或更高版本配置HarmonyOS SDK申请开发者账号 ​​项目创建​​&#xff1a; File > New > Create Project > Application (选择"Empty Ability") 二、核心功能实现 1. 医院科室展示 /…...

DIY|Mac 搭建 ESP-IDF 开发环境及编译小智 AI

前一阵子在百度 AI 开发者大会上&#xff0c;看到基于小智 AI DIY 玩具的演示&#xff0c;感觉有点意思&#xff0c;想着自己也来试试。 如果只是想烧录现成的固件&#xff0c;乐鑫官方除了提供了 Windows 版本的 Flash 下载工具 之外&#xff0c;还提供了基于网页版的 ESP LA…...

【Oracle】分区表

个人主页&#xff1a;Guiat 归属专栏&#xff1a;Oracle 文章目录 1. 分区表基础概述1.1 分区表的概念与优势1.2 分区类型概览1.3 分区表的工作原理 2. 范围分区 (RANGE Partitioning)2.1 基础范围分区2.1.1 按日期范围分区2.1.2 按数值范围分区 2.2 间隔分区 (INTERVAL Partit…...

是否存在路径(FIFOBB算法)

题目描述 一个具有 n 个顶点e条边的无向图&#xff0c;该图顶点的编号依次为0到n-1且不存在顶点与自身相连的边。请使用FIFOBB算法编写程序&#xff0c;确定是否存在从顶点 source到顶点 destination的路径。 输入 第一行两个整数&#xff0c;分别表示n 和 e 的值&#xff08;1…...

Redis的发布订阅模式与专业的 MQ(如 Kafka, RabbitMQ)相比,优缺点是什么?适用于哪些场景?

Redis 的发布订阅&#xff08;Pub/Sub&#xff09;模式与专业的 MQ&#xff08;Message Queue&#xff09;如 Kafka、RabbitMQ 进行比较&#xff0c;核心的权衡点在于&#xff1a;简单与速度 vs. 可靠与功能。 下面我们详细展开对比。 Redis Pub/Sub 的核心特点 它是一个发后…...

管理学院权限管理系统开发总结

文章目录 &#x1f393; 管理学院权限管理系统开发总结 - 现代化Web应用实践之路&#x1f4dd; 项目概述&#x1f3d7;️ 技术架构设计后端技术栈前端技术栈 &#x1f4a1; 核心功能特性1. 用户管理模块2. 权限管理系统3. 统计报表功能4. 用户体验优化 &#x1f5c4;️ 数据库设…...