十三、MySQL高级—读写分离(6)

news2024/12/26 11:21:39

🌻🌻 目录

  • 一、Mycat 介绍
    • 1.1 是什么
    • 1.2 干什么的
    • 1.3 原理
  • 二、安装启动
    • 2.1 解压缩文件拷贝到linux下 /usr/local/
    • 2.2 三个文件
    • 2.3 启动前先修改schema.xml(配置)
    • 2.4 再修改server.xml
    • 2.5 验证数据库访问情况
    • 2.6 启动程序
    • 2.7 启动时可能出现报错
    • 2.8 登录
      • 2.8.1 数据窗口
      • 2.8.2 后台管理窗口
  • 三、读写分离
    • 3.1 读写分离
    • 3.2 schema.xml

文章大纲 👇👇

在这里插入图片描述

一、Mycat 介绍

1.1 是什么

数据库中间件

  • 前身是阿里的cobar

1.2 干什么的

1、读写分离

2、数据分片

  • 垂直拆分
  • 水平拆分
  • 垂直+水平拆分

在这里插入图片描述

3、多数据源整合

1.3 原理

“拦截”

  • Mycat 的原理中最重要的一个动词是“拦截”,它拦截了用户发送过来的 SQL 语句,首先对 SQL 语句做了
    一些特定的分析:如分片分析、路由分析、读写分离分析、缓存分析等,然后将此 SQL 发往后端的真实数据库,
    并将返回的结果做适当的处理,最终再返回给用户

在这里插入图片描述

二、安装启动

2.1 解压缩文件拷贝到linux下 /usr/local/

官网下载:https://github.com/MyCATApache/Mycat-download

本地资源库获取

① 上传到服务器(建议另开一台服务器,不要使用前面的主从服务器

在这里插入图片描述

② 进行解压缩

在这里插入图片描述

cd /usr/local/

tar -xvf Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz

③ 如果不在 /usr/local 下面,则进行拷贝到下面 cp -r mycat /usr/local

在这里插入图片描述

2.2 三个文件

schema.xml

  • 定义逻辑库,表、分片节点等内容

rule.xml

  • 定义分片规则

server.xml

  • 定义用户以及系统相关变量,如端口等.

2.3 启动前先修改schema.xml(配置)

<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
           <!--逻辑库    name名称,   checkSQLschema         sqlMaxLimit 末尾是否要加 limit xxx-->
        <schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1"> </schema>
            <!--逻辑库    name名称,   dataHost 引用的哪个dataHost      database:对应mysql的database-->
        <dataNode name="dn1" dataHost="localhost1" database="db1" />
        <dataHost name="localhost1" maxCon="1000" minCon="10" balance="0"
                          writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
                <heartbeat>select user()</heartbeat>
                <!-- can have multi write hosts -->
                <writeHost host="hostM1" url="localhost:3306" user="root"
                                   password="root">
                </writeHost>
        </dataHost>
</mycat:schema>
 <schema>
 <dataNode>
 <dataHost>

① 在linux配置文件中显示行号

在这里插入图片描述

:set nu  #显示行号

dd  #删除当前行 
26dd # 删除当前下面的26行

在这里插入图片描述

<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
           <!--逻辑库    name名称,   checkSQLschema         sqlMaxLimit 末尾是否要加 limit xxx-->
        <schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1"> </schema>
            <!--逻辑库    name名称,   dataHost 引用的哪个dataHost      database:对应mysql的database-->
        <dataNode name="dn1" dataHost="host1" database="mydb202401" />
        <dataHost name="host1" maxCon="1000" minCon="10" balance="0"
                          writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
                <heartbeat>select user()</heartbeat>
                <!-- can have multi write hosts -->
                <writeHost host="hostM1" url="192.168.10.100:3306" user="root"
                                   password="root">
                        <!-- can have multi read  hosts -->
                      <readHost host="hostS1" url="192.168.10.102:3306" user="root"
                                         password="root">
                      </readHost>
                </writeHost>
        </dataHost>

2.4 再修改server.xml

在这里插入图片描述

<user name="mycat">
   <property name="password">654321</property>
   <property name="schemas">TESTDB</property>
</user>

2.5 验证数据库访问情况

意思大概是:启动我的mycat的时候,能访问到我配置的两个数据库

在这里插入图片描述

mysql -uroot -proot -h 192.168.10.100 -P 3306

mysql -uroot -proot -h 192.168.10.102 -P 3306

如本机远程访问报错,请建对应用户

grant all privileges on *.* to root@'缺少的host' identified by 'root';

2.6 启动程序

  • 控制台启动 :去mycat/bin 目录下 mycat console (建议控制台启动:控制台可以看到日志)
  • 后台启动 :去mycat/bin 目录下 mycat start

在这里插入图片描述

2.7 启动时可能出现报错

域名解析失败

在这里插入图片描述

  • 1、用vi 修改 /etc/hosts 文件

127.0.0.1 后面增加你的机器名

在这里插入图片描述

  • 2、修改后重新启动网络服务

在这里插入图片描述

2.8 登录

2.8.1 数据窗口

在这里插入图片描述

mysql -umycat -p123456 -h 192.168.10.102 -P8066

命令

show database;

use TESTDB;

show tables;

select * from mytbl;

2.8.2 后台管理窗口

mysql -umycat -p123456 -P9066 -h192.168.10.102
show @@help

在这里插入图片描述

三、读写分离

前提:已经搭建好了主从复制

3.1 读写分离

  1. 创建表或在前面已创建的表中插入如下记录(动态获取登录的主机名)
create table mytbl 
(    id  int auto_increment , 
     name varchar(20) 
);
  1. 分别在两个库下插入:insert into mytbl(name) values (@@hostname)
  1. 然后再mycat下执行select * from mytbl

在这里插入图片描述

在这里插入图片描述

3.2 schema.xml

在这里插入图片描述

<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
 <!--逻辑库    name名称,   checkSQLschema         sqlMaxLimit 末尾是否要加 limit xxx-->
        <schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1"> </schema>
            <!--逻辑库    name名称,   dataHost 引用的哪个dataHost      database:对应mysql的database-->
        <dataNode name="dn1" dataHost="host1" database="mydb202401" />
        <dataHost name="host1" maxCon="1000" minCon="10" balance="2"
                          writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
                <heartbeat>select user()</heartbeat>
                <!-- can have multi write hosts -->
                <writeHost host="hostM1" url="192.168.10.100:3306" user="root"
                                   password="root">
                        <!-- can have multi read  hosts -->
                      <readHost host="hostS1" url="192.168.10.102:3306" user="root"
                                         password="root">
                      </readHost>
                </writeHost>
        </dataHost>
</mycat:schema>

balance

  • 负载均衡类型,目前的取值有4 种:
    1. balance="0", 不开启读写分离机制,所有读操作都发送到当前可用的 writeHost 上。
    1. balance="1",全部的 readHoststand by writeHost(意思是写主机没有挂掉,就一直有仅有一台写主机运作) 参与 select 语句的负载均衡,简单的说,当双主双从模式(M1->S1,M2->S2,并且 M1 与 M2 互为主备),正常情况下,M2,S1,S2 都参与 select 语句的负载均衡。
    1. balance="2",所有读操作都随机的在 writeHost、readhost 上分发。
    1. balance="3",所有读请求随机的分发到 readhost 执行,writerHost 不负担读压力

在这里插入图片描述

[root@linux-102 conf]# vi schema.xml

[root@linux-102 bin]# ./mycat restart
  • 最后:当在mycat下面运行 select * from mytbl;就会动态切换;

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

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

相关文章

Hive SQL子查询应用

目录 环境准备看如下链接 子查询 查询所有课程成绩均小于60分的学生的学号、姓名 查询没有学全所有课的学生的学号、姓名 解释: 没有学全所有课,也就是该学生选修的课程数 < 总的课程数。 查询出只选修了三门课程的全部学生的学号和姓名 环境准备看如下链接 环境准备h…

应用层 思维导图

绪论&#xff1a; ​“有志者自有千计万计&#xff0c;无志者只感千难万难。” 话不多说安全带系好&#xff0c;发车啦&#xff08;建议电脑观看&#xff09;。 思维导图能很好的帮助到我们去学习和理解记忆知识&#xff0c;当我们对一个知识有了一定的框架后就能有逻辑性的去…

关于我的阿里云服务器被入侵 - 分析报告

目录 引言一、事件概述1. 异地登陆2. 挖矿程序3. 密钥未注册4. 勒索病毒 二、问题分析1. 异地登陆2. 挖矿程序3. 密钥登录失效&#xff08;密钥未注册&#xff09;4. 勒索病毒 三、安全知识讲解1. 密钥登录 四、总结 引言 因为是第一次租云服务器&#xff0c;所以出现了很多的…

Clion配置ESP32开发,一文就够了

目录 1.下载ESP-IDF2.配置ESP32开发环境2.1方法1:Clion官方手册2.2方法2: 3.测试Clion开发ESP32的环境4.关于Clion的monitor无法正常运行的解决方法 我这里使用的CLiion版本是2023.2.1&#xff0c;网上激活方法有很多&#xff0c;这里就不赘述。 电脑是WIn11系统。 1.下载ESP-I…

无线感知会议系列【1】【增强无线感知应用的鲁棒性】

前言&#xff1a; 这个是2021年 泛在可信智能感知论坛&#xff0c;汤战勇 &#xff08;西北大学物联网研究院 )教授的 一个讲座《wireless signals like WiFi, RFID and (ultra) sound as a powerful modality for ubiquitous sensing》 参考连接&#xff1a; 4.见微知萌—…

02_硬件基础知识学习

通过上一课的学习&#xff0c;我们貌似成功的点亮了一个 LED 小灯&#xff0c;但是有一些知识大家还没彻底搞明白。单片机是根据硬件电路图的设计来编写代码的&#xff0c;所以我们不仅仅要学习编程知识&#xff0c;还要学习基本的硬件知识&#xff0c;这节课我们就要来穿插介绍…

萱仔环境记录——git的使用流程:以上传一个项目进入GitHub仓库为例子

前段时间我已经不使用学校的电脑了&#xff0c;在自己的笔记本上安装了git&#xff0c;准备好好把我这几年做的项目整理一下进行开源&#xff0c;由于前几次的面试&#xff0c;一些公司考核到了git的用法&#xff0c;虽然平时我也在使用git对自己的项目进行管理&#xff0c;但还…

为什么腾讯难以再现《黑神话:悟空》这样的游戏大作?

自《黑神话:悟空》发布以来,它凭借令人惊艳的画面和深入人心的故事情节,迅速在全球范围内收获了大量粉丝。这款游戏的成功,不仅让全球玩家看到了国产游戏的新高度,也让许多人开始好奇:作为中国游戏行业的巨头,腾讯为什么没能推出类似《黑神话:悟空》这样震撼的作品?今…

c++166面下该过程 向面向对象的转变

#include<iostream> using namespace std; //设计类 属性 函数 //案例一 &#xff1a;立方体 面积和体积 //求两个立方体是否相等 &#xff08;全局函数和成员函数&#xff09; class Cube { private:int m_a;int m_b;int m_c;int m_v;int m_s;public://void setA(int a…

视频剪辑软件大盘点:四款神级工具让你工作更高效!

工作中&#xff0c;视频剪辑是一项不可或缺的技能。而选择一款好用的视频剪辑软件&#xff0c;更是提升工作效率的关键。今天&#xff0c;我就将从功能、易用性、效果以及个人使用感受等方面为大家推荐四款免费的视频剪辑软件&#xff1a; 第一款&#xff1a;福昕视频剪辑 我…

中秋之约,尽在食家巷小程序

中秋&#xff0c;那是一个被月光温柔包裹&#xff0c;被亲情浓浓环绕的节日。在这个象征团圆的日子里&#xff0c;美食就像是情感的纽带&#xff0c;将人们的心紧紧系在一起。而食家巷的美味绝对能让你的中秋更添几分甜蜜。 现在呀&#xff0c;我要给大家推荐一个超级方便的好东…

毫欧表设计整体思路

原因 对于焊接设备的低阻值测量&#xff0c;一般都是mΩ级别的&#xff0c;但万用表的电阻档一般都是以200Ω做为最小档位 设计原理及软件实现设计 设计思路原理图 通过串联在电路中的电流相等&#xff0c;根据阻值和电压的关系得到电阻对应大小 设计中需要考虑的问题 1…

[ccs调试记录]

解决方式&#xff1a;删除code_strat 提示Page0内存不够&#xff0c;找到Page0&#xff0c;根据红叉提示&#xff0c;Ram1内存不足&#xff0c;进行修改 Ram1 length从1000修改为2000&#xff0c;即可&#xff1a;

MIT6.824 课程-PrimaryBackupReplication

Primary Backup Replication 背景 为实现可容错的服务器&#xff0c;主从备份是一种常用的解决方案&#xff1a;在开启了主动备份的系统中&#xff0c;备份服务器的状态需要在几乎任何时候都与主服务器保持一致&#xff0c;这样当主服务器失效后备份服务器才能立刻接管。实现…

计算机网络(二) —— 网络编程套接字

目录 一&#xff0c;认识端口号 1.1 背景 1.2 端口号是什么 1.3 三个问题 二&#xff0c;认识Tcp协议和Udp协议 三&#xff0c;网络字节序 四&#xff0c;socket编程接口 4.1 socket常见API 4.2 sockaddr结构 一&#xff0c;认识端口号 1.1 背景 问题&#xff1a;在进…

C++,Qt学习 2024.9.10

制作ui界面实现&#xff1a;模拟定时闹钟功能 启动后&#xff0c;lab实时获取系统时间&#xff0c;当系统时间走到设置的时间时&#xff0c;语音播报下方lineEdit中的内容&#xff0c;启动前取消按键不可用&#xff0c;启动后除了取消按键可用其他部分都设为不可用&#xff0c…

Java 创建对象方法的演变

1、普通 Java 代码 public class Rectangle {private int width;private int length;public Rectangle() {System.out.println("Hello World!");}public void setWidth(int widTth) {this.width widTth;}public void setLength(int length) {this.length length;}…

个人随想-如何开发一个code agent

随着sonnet的普及&#xff0c;现在的开发确实可以达到事半功倍的效果&#xff0c;再加上cursor、claude dev等工具的加持&#xff0c;现在的软件开发&#xff0c;确实门槛降低了很多&#xff0c;我们可以快速的让ai给我们大量的提示、重构、单元测试、explain甚至是完全用自然语…

c++指针和引用专题

一 基本概念 图解C++指针与引用的区别_指针与引用 图解-CSDN博客https://blog.csdn.net/shang_0122/article/details/104755481 为什么C+

房屋租赁|基于springboot的房屋租赁管理系统设计与实现(附项目源码+论文+数据库)

私信或留言即免费送开题报告和任务书&#xff08;可指定任意题目&#xff09; 目录 一、摘要 二、相关技术 三、系统设计 四、数据库设计 五、核心代码 六、论文参考 七、源码获取 一、摘要 互联网发展至今&#xff0c;无论是其理论还是技术都已经成熟&#x…