当前位置: 首页 > 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;文末附链…...

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…...

SkyWalking 10.2.0 SWCK 配置过程

SkyWalking 10.2.0 & SWCK 配置过程 skywalking oap-server & ui 使用Docker安装在K8S集群以外&#xff0c;K8S集群中的微服务使用initContainer按命名空间将skywalking-java-agent注入到业务容器中。 SWCK有整套的解决方案&#xff0c;全安装在K8S群集中。 具体可参…...

docker详细操作--未完待续

docker介绍 docker官网: Docker&#xff1a;加速容器应用程序开发 harbor官网&#xff1a;Harbor - Harbor 中文 使用docker加速器: Docker镜像极速下载服务 - 毫秒镜像 是什么 Docker 是一种开源的容器化平台&#xff0c;用于将应用程序及其依赖项&#xff08;如库、运行时环…...

利用ngx_stream_return_module构建简易 TCP/UDP 响应网关

一、模块概述 ngx_stream_return_module 提供了一个极简的指令&#xff1a; return <value>;在收到客户端连接后&#xff0c;立即将 <value> 写回并关闭连接。<value> 支持内嵌文本和内置变量&#xff08;如 $time_iso8601、$remote_addr 等&#xff09;&a…...

【Oracle APEX开发小技巧12】

有如下需求&#xff1a; 有一个问题反馈页面&#xff0c;要实现在apex页面展示能直观看到反馈时间超过7天未处理的数据&#xff0c;方便管理员及时处理反馈。 我的方法&#xff1a;直接将逻辑写在SQL中&#xff0c;这样可以直接在页面展示 完整代码&#xff1a; SELECTSF.FE…...

Spring Boot 实现流式响应(兼容 2.7.x)

在实际开发中&#xff0c;我们可能会遇到一些流式数据处理的场景&#xff0c;比如接收来自上游接口的 Server-Sent Events&#xff08;SSE&#xff09; 或 流式 JSON 内容&#xff0c;并将其原样中转给前端页面或客户端。这种情况下&#xff0c;传统的 RestTemplate 缓存机制会…...

Oracle查询表空间大小

1 查询数据库中所有的表空间以及表空间所占空间的大小 SELECTtablespace_name,sum( bytes ) / 1024 / 1024 FROMdba_data_files GROUP BYtablespace_name; 2 Oracle查询表空间大小及每个表所占空间的大小 SELECTtablespace_name,file_id,file_name,round( bytes / ( 1024 …...

【入坑系列】TiDB 强制索引在不同库下不生效问题

文章目录 背景SQL 优化情况线上SQL运行情况分析怀疑1:执行计划绑定问题?尝试:SHOW WARNINGS 查看警告探索 TiDB 的 USE_INDEX 写法Hint 不生效问题排查解决参考背景 项目中使用 TiDB 数据库,并对 SQL 进行优化了,添加了强制索引。 UAT 环境已经生效,但 PROD 环境强制索…...

遍历 Map 类型集合的方法汇总

1 方法一 先用方法 keySet() 获取集合中的所有键。再通过 gey(key) 方法用对应键获取值 import java.util.HashMap; import java.util.Set;public class Test {public static void main(String[] args) {HashMap hashMap new HashMap();hashMap.put("语文",99);has…...

Linux简单的操作

ls ls 查看当前目录 ll 查看详细内容 ls -a 查看所有的内容 ls --help 查看方法文档 pwd pwd 查看当前路径 cd cd 转路径 cd .. 转上一级路径 cd 名 转换路径 …...