数据库进阶教学——读写分离(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
  • 验证完毕。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/2661168.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

【HarmonyOS开发】案例-记账本开发

OpenHarmony最近一段时间&#xff0c;简直火的一塌糊度&#xff0c;学习OpenHarmony相关的技术栈也有一段时间了&#xff0c;做个记账本小应用&#xff0c;将所学知识点融合记录一下。 1、记账本涉及知识点 基础组件&#xff08;Button、Select、Text、Span、Divider、Image&am…

TikTok真题第8天 | 418.屏幕可显示句子的数量、395.至少有K个重复字符的最长子串、1010.总持续时间可以被60整除的歌曲对

418.屏幕可显示句子的数量 题目链接&#xff1a;418.sentence-screen-fitting 解法&#xff1a; 这道题&#xff0c;看题解都很难看懂&#xff0c;哪怕看出点门道了&#xff0c;也很难用自己的话解释出来。 有几点必须清楚&#xff1a; &#xff08;1&#xff09;将字符串…

10. Opencv检测并截取图中二维码

1. 说明 在二维码扫描功能开发中,使用相机扫描图片时,往往图片中的信息比较多样,可能会造成二维码检测失败的问题。一种提高检测精度的方式就是把二维码在图片中单独抠出来,去除其它冗余信息,然后再去识别这张提取出来的二维码。本篇博客记录采用的一种实现二维码位置检测…

计算机网络——应用层与网络安全(六)

前言&#xff1a; 前几章我们已经对TCP/IP协议的下四层已经有了一个简单的认识与了解&#xff0c;下面让我们对它的最顶层&#xff0c;应用层进行一个简单的学习与认识&#xff0c;由于计算机网络多样的连接形式、不均匀的终端分布&#xff0c;以及网络的开放性和互联性等特征&…

L1-069:胎压监测

题目描述 小轿车中有一个系统随时监测四个车轮的胎压&#xff0c;如果四轮胎压不是很平衡&#xff0c;则可能对行车造成严重的影响。 让我们把四个车轮 —— 左前轮、右前轮、右后轮、左后轮 —— 顺次编号为 1、2、3、4。本题就请你编写一个监测程序&#xff0c;随时监测四轮的…

GaussDB数据库中的同义词SYNONYM

目录 一、前言 二、GasussDB数据库中的Synonym 1、Synonym的概念 2、语法介绍 3、Synonym的用途 三、Synonym在GaussDB数据库中是如何使用的 1、表的同义词使用&#xff08;示例&#xff09; 2、视图的同义词使用&#xff08;示例&#xff09; 3、函数的同义词使用&am…

分布式IO在工业自动化中的应用

传统的自动化产线及物流系统主要是利用PLC来处理数据&#xff0c;并将这些数据保存在PC当中。但是随着互联网技术的迅速发展&#xff0c;越来越多的系统集成商利用分布式IO模块&#xff0c;实现从控制器到自动化最底层之间的IO通信。 分布式IO在工业自动化中的应用 分布式IO是用…

Vue3+ElementPlus: 给点击按钮添加触发提示

一、需求 在Vue3项目中&#xff0c;有一个下载按钮&#xff0c;当鼠标悬浮在按钮上面时&#xff0c;会出现文字提示用户可以点击按钮进行数据的下载技术栈 Vue3 ElementPlusTooltip组件 ElementPlus中的Tooltip组件 &#xff0c;可用于展示鼠标 hover 时的提示信息 二、实现…

【SD】IP-Adapter 进阶 - 垫图 【1】

目录 关于SD1.5的画风迁移 修改动作-方法一&#xff1a;提示词 修改动作-方法二&#xff1a;openpose 关于SD1.5的画风迁移 1.5测试模型&#xff1a;flat2DAnimerge_v30_2.safetensors [b2c93e7a89] 测试图&#xff1a; 文生图&#xff1a;best quality,masterpiece, co…

GPT-5、开源、更强的ChatGPT!

年终岁尾&#xff0c;正值圣诞节热闹气氛的OpenAI写下了2024年的发展清单。 OpenAI联合创始人兼首席执行官Sam Altman在社交平台公布&#xff0c;AGI&#xff08;稍晚一些&#xff09;、GPT-5、更好的语音模型、更高的费率限制&#xff1b; 更好的GPTs&#xff1b;更好的推理…

weblogic未授权命令执行漏洞(CVE-2020-14882)

漏洞描述&#xff1a; 未经身份验证的远程攻击者可能通过构造特殊的 HTTP GET请求&#xff0c;利用该漏洞在受影响的 weblogic Server 上执行任意代码。 复现过程&#xff1a; 1.访问ip&#xff1a;port/console 2.poc构造 #!/usr/bin/env python3 # -*- coding: utf-8 -*-…

春款来啦~我先冲了

这款假两件设计的连帽风衣外套 宽松版型对身材包容性很强&#xff0c;韩系慵懒风颜色很舒服 时尚百搭怎么穿都好看系列 做了腰部可调节抽绳&#xff0c;想要修身一点的可以自己调节哈 袖口处也做了金属按扣调节&#xff0c;防风保暖 这件风衣也很好搭配&#xff0c;很经典…

css原子化的框架Tailwindcss的使用教程(原始html和vue项目的安装与配置)

安装教程 中文官网教程 原始的HTML里面使用 新建文件夹npm init -y 初始化项目 安装相关依赖 npm install -D tailwindcss postcss-cli autoprefixer初始化两个文件 npx tailwindcss init -p根目录下新建src/style.css tailwind base; tailwind components; tailwind ut…

利用Jmeter做接口测试(功能测试)全流程分析!

利用Jmeter做接口测试怎么做呢&#xff1f;过程真的是超级简单。 明白了原理以后&#xff0c;把零碎的知识点填充进去就可以了。所以在学习的过程中&#xff0c;不管学什么&#xff0c;我一直都强调的是要循序渐进&#xff0c;和明白原理和逻辑。这篇文章就来介绍一下如何利用…

【数据结构】图论与并查集

一、并查集 1.原理 简单的讲并查集&#xff0c;就是查询两个个元素&#xff0c;是否在一个集合当中&#xff0c;这里的集合用树的形式进行表示。并查集的本质就是森林, 即多棵树。 我们再来简单的举个例子: 假设此时的你是大一新生&#xff0c;刚进入大学&#xff0c;肯定是…

什么是骨传导耳机?骨传导能保护听力吗?

骨传导耳机是一种非常特殊的蓝牙耳机&#xff0c;它通过骨传导技术将声音直接传送到内耳。这种技术不同于传统耳机&#xff0c;它不通过空气传送声音&#xff0c;而是通过头骨的振动来传送声音。 并且骨传导耳机能够在一定程度上起到保护听力的作用&#xff0c;主要是因为它们不…

Oracle中null值和空字符串的坑

思考 今天在学习oracle数据库的过程中&#xff0c;发现当对字段进行约束&#xff0c;默认空字符串时&#xff0c;出现报错 --创建employees表 CREATE TABLE employees (id NUMBER,name VARCHAR2(100) ); --对表新增email列&#xff0c;添加约束默认空字符串并且非空 ALTER …

山景32位蓝牙DSP音频应用处理芯片—BP1048B2

由工采网代理的BP1048B2是山景推出的一款高性能32位DSP蓝牙音频应用处理器&#xff1b;该芯片拥有32位RISC内核&#xff0c;支持DSP指令&#xff0c;集成FPU支持浮点运算&#xff0c;可应用于蓝牙K歌宝、蓝牙便携式音箱、蓝牙拖箱、蓝牙SoundBar、包头式蓝牙耳机、各类蓝牙音频…

阿里云PolarDB数据库费用价格表

阿里云数据库PolarDB租用价格表&#xff0c;云数据库PolarDB MySQL版2核4GB&#xff08;通用&#xff09;、2个节点、60 GB存储空间55元5天&#xff0c;云数据库 PolarDB 分布式版标准版2核16G&#xff08;通用&#xff09;57.6元3天&#xff0c;阿里云百科aliyunbaike.com分享…

uniapp中uview组件库的Search 搜索 的用法

目录 基本使用 #设置输入框形状 #是否开启清除控件 #是否开启右边控件 #自定义样式 API #Props #Events 基本使用 通过placeholder参数设置占位内容通过v-model双向绑定一个变量值&#xff0c;设置初始化时搜索框的值&#xff0c;如果初始内容为空&#xff0c;那么请绑…