瑞吉外卖—读写分离

news2024/9/22 8:32:20

文章目录

  • 1. 概述
  • 2. MySQL主从复制
    • 2.1 介绍
    • 2.1 配置
      • 2.1.1 前置条件
      • 2.1.2 主库Master
      • 2.1.3 从库Slave
  • 3. 读写分离案例
    • 3.1 背景
    • 3.2 Sharding-JDBC介绍
    • 3.3 入门案例

1. 概述

读写分离、主从复制。就是dml操作在主库、query操作在备份的从库。分担压力,减轻单点故障。
在这里插入图片描述

2. MySQL主从复制

2.1 介绍

MySQL主从复制是一个异步的复制过程,底层是基于Mysq1数据库自带的二进制日志功能。就是一台或多台MySOL数据库(s1ave,即从库)从另一台MySQL数据库(master,即主库)进行日志的复制然后再解析日志并应用到自身,最终实现从库的数据和主库的数据保持一致。MVSQL主从复制是MVSOL数据库自带功能,无需借助第三方工具。

MySQL复制过程分成三步

  • master将改变记录到二进制日志(binary log)

  • slave将master的binary log拷贝到它的中继日志(relay log)

  • slave重做中继日志中的事件,将改变应用到自己的数据库中

    在这里插入图片描述

2.1 配置

2.1.1 前置条件

提前准备好两台服务器,分别安装Mysq1并启动服务成功

  • 主库Master 192.168.74.128

  • 从库slave 192.168.74.130

    service mysqld start
    service mysqld status
    

2.1.2 主库Master

  • 第一步:修改Mysql数据库的配置文件/etc/my.cnf

    [mysqld]
    log-bin=mysql-bin	#[必须]启用二进制日志
    server-id=100	#[必须]服务器唯一ID
    
  • 第二步:重启mysql

    systemctl restart mysqld
    
  • 第三步:登录Mysql数据库,执行下面SQL
    修改密码等级和最低要求长度

    set global validate_password_policy=LOW;
    set global validate_password_length=6;
    
    GRANT REPLICATION SLAVE ON *.* to 'ljy'@'%' identified by '123456';
    

    注:上面SQL的作用是创建一个用户ljy,密码为123456,并且给ljy用户授予REPLICATION SLAVE权限。常用于建立复制时所需要用到的用户权限,也就是slave必须被master授权具有该权限的用户,才能通过该用户复制。

  • 第四步:登录Mysql数据库,执行下面SQL,记录下结果中File和Position的值

    show master status;
    

    在这里插入图片描述
    注:上面SQL的作用是查看Master的状态,执行完此SQL后不要再执行任何操作

2.1.3 从库Slave

  • 第一步:修改Mysql数据库的配置文件/etc/my.cnf

    [mysqld]
    server-id=101 	#[必须]服务器唯一ID
    
  • 第二步:重启mysql

    systemctl restart mysqld
    
  • 第三步:登录Mysql数据库,执行下面SQL

    change master to master_host='192.168.74.128',master_user='ljy',master_password='123456',master_log_file='mysql-bin.000001',master_log_pos=436;
    start slave;
    
  • 第四步:登录Mysql数据库,执行下面SQL,查看从数据库的状态

    show slave status\G;
    

    在这里插入图片描述

3. 读写分离案例

3.1 背景

面对日益增加的系统访问量,数据库的吞吐量面临着巨大瓶颈。对于同一时刻有大量并发读操作和较少写操作类型的应用系统来说,将数据库拆分为主库从库,主库负责处理事务性的增删改操作,从库负责处理查询操作,能够有效的避免由数据更新导致的行锁,使得整个系统的查询性能得到极大的改善。
在这里插入图片描述

3.2 Sharding-JDBC介绍

Sharding-JDBC定位为轻量级Java框架,在Java的IDBC层提供的额外服务。它使用客户端直连数据库,以jar包形式提供服务,无需额外部署和依赖,可理解为增强版的JDBC驱动,完全兼容JDBC和各种ORM框架。
使用Sharding-JDBC可以在程序中轻松的实现数据库读写分离。

  • 适用于任何基于IDBC的ORM框架,如:JPA,Hibernate,Mvbatis,Spring JDBcTemplate或直接使用IDBC,
  • 支持任何第三方的数据库连接池,如:DBCP,C3P0,BoneCP,Druid,HikariCP等。
  • 支持任意实现JDBC规范的数据库。目前支持MySQL,0racle,s0LServer,PostgreQL以及任何遵循SQL92标准的数据库。

3.3 入门案例

使用Sharding-JDBC实现读写分离步骤:

  • 1、导入maven坐标

    <dependency>
    	<groupId>org.apache.shardingsphere</groupId>
    	<artifactId>sharding-jdbc-spring-boot-starter</artifactId>
    	<version>4.0.0-RC1</version>
    </dependency>
    
  • 2、在配置文件中配置读写分离规则

    spring:
      shardingsphere:
        datasource:
          names:
            master,slave
          # 主数据源
          master:
            type: com.alibaba.druid.pool.DruidDataSource
            driver-class-name: com.mysql.cj.jdbc.Driver
            url: jdbc:mysql://192.168.74.128:3306/rw?characterEncoding=utf-8
            username: root
            password: root
          # 从数据源
          slave:
            type: com.alibaba.druid.pool.DruidDataSource
            driver-class-name: com.mysql.cj.jdbc.Driver
            url: jdbc:mysql://192.168.74.130:3306/rw?characterEncoding=utf-8
            username: root
            password: root
        masterslave:
          # 读写分离配置
          load-balance-algorithm-type: round_robin #轮询
          # 最终的数据源名称
          name: dataSource
          # 主库数据源名称
          master-data-source-name: master
          # 从库数据源名称列表,多个逗号分隔
          slave-data-source-names: slave
        props:
          sql:
            show: true #开启SQL显示,默认false
    
    
  • 3、在配置文件中配置允许bean定义覆盖配置项

    spring:
    	main:
    	  allow-bean-definition-overriding: true
    

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

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

相关文章

标准库标头 <barrier>(C++20)学习

此头文件是线程支持库的一部分。 类模板 std::barrier 提供一种线程协调机制&#xff0c;阻塞已知大小的线程组直至该组中的所有线程到达该屏障。不同于 std::latch&#xff0c;屏障是可重用的&#xff1a;一旦到达的线程组被解除阻塞&#xff0c;即可重用同一屏障。与 std::l…

django自用教程

编程软件: pycharm django介绍:django是Pythonweb的一个框架&#xff0c;是用来构建网站的工具。 要想使用django&#xff0c;首先需要下载django模块&#xff0c;通过使用以下代码实现: pip install django 安装完成后&#xff0c;在django的目录下有一个文件django-admin&am…

Docker启动Mysql镜像报错问题?

docker中启动mysql镜像报错如下&#xff1a;ls: cannot access /docker-entrypoint-initdb.d/: Operation not permitted 百度上查到了很多解决方案&#xff0c;也咨询了很多大佬&#xff0c;加权限&#xff0c;改用户&#xff0c;均无果。最终在阿里巴巴上找到了解决方案&…

【有啥问啥】深入理解数据结构 Merkle 树:数据完整性保障的基石

深入理解 Merkle 树&#xff1a;数据完整性保障的基石 在当今的分布式系统和区块链应用中&#xff0c;数据的完整性验证变得至关重要。随着区块链技术、分布式存储系统&#xff08;如 IPFS&#xff09;、以及版本控制系统&#xff08;如 Git&#xff09;的大规模应用&#xff…

【Linux】文件权限与类型全解:你的文件安全指南

欢迎来到 CILMY23 的博客 &#x1f3c6;本篇主题为&#xff1a;文件权限与类型全解&#xff1a;你的文件安全指南 &#x1f3c6;个人主页&#xff1a;CILMY23-CSDN博客 &#x1f3c6;系列专栏&#xff1a;Python | C | C语言 | 数据结构与算法 | 贪心算法 | Linux | 算法专题…

kubectl 命令介绍以及使用

文章目录 kubectl 基本命令查看集群信息管理命名空间操作节点 操作 Pods查看 Pods 状态创建和删除 Pods调试 Pods 操作 Deployments创建 Deployment更新 Deployment回滚 Deployment 操作 Services暴露服务查看服务状态 更多 kubectl 命令资源描述资源过滤日志查看配置上下文和切…

热门语音转文字工具大比拼

现在工作、生活的节奏越来越快&#xff0c;很多时候会议上并没有充足的时间来记录会议内容&#xff0c;最快捷的方式就是用录音来记录每一个观点。录音文件后期转化为文字需要花费大力气吗&#xff1f;并不是&#xff0c;现在有着讯飞语音转文字这类高速高效的转换工具可以轻松…

PMP–一、二、三模–分类–13.干系人管理--技巧--1、干系人分析

文章目录 二模13.干系人管理--干系人分析--题干关键词 “干系人信息&#xff08;权力、角色、利益、关系、态度、影响……&#xff09;、识别完干系人、某干系人抵制项目”。5、 [单选] 一家公司启动了一个与开发新服务相关的项目&#xff0c;而该公司并不具有此类专业知识。项…

分布式集群下如何做到唯一序列号

优质博文&#xff1a;IT-BLOG-CN 分布式架构下&#xff0c;生成唯一序列号是设计系统常常会遇到的一个问题。例如&#xff0c;数据库使用分库分表的时候&#xff0c;当分成若干个sharding表后&#xff0c;如何能够快速拿到一个唯一序列号&#xff0c;是经常遇到的问题。实现思…

【AI赋能医学】基于深度学习和HRV特征的多类别心电图分类

一、数据集简介 论文中使用了来自三类不同心电图记录的162条数据&#xff0c;这些数据来自三个公开的数据库&#xff1a; MIT-BIH 心律失常数据库 (ARR) 96条记录&#xff0c;主要包含不同类型的心律失常样本。 MIT-BIH 正常窦性心律数据库 (NSR) 36条记录&#xff0c;包含健…

【springboot】简易模块化开发项目整合MyBatis-plus

接父子工程项目搭建&#xff0c;继续扩展项目 重新调整模块结构 1.删除子模块fast-demo-web中所有无用内容 2.右键fast-demo-web名称->新建&#xff08;news&#xff09;->模块&#xff08;Module&#xff09;&#xff0c;创建新的子模块 3.选择新建Maven工程 4.新建模…

STMCubeMX文件下载后会出现其他项目无法下载的问题

一、问题 二、解决方法 ①、对箭头所指处画√ ②、按住复位键不要松开&#xff0c;你点击下载&#xff0c;1s左右松开即可发现可以重新下载了

计算机毕业设计 教务管理系统 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试

&#x1f34a;作者&#xff1a;计算机编程-吉哥 &#x1f34a;简介&#xff1a;专业从事JavaWeb程序开发&#xff0c;微信小程序开发&#xff0c;定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事&#xff0c;生活就是快乐的。 &#x1f34a;心愿&#xff1a;点…

GD32F4开发 -- JLink使用

之前写过 STM32开发 – Jlink常用命令 &#xff0c;今天遇到需要SEGGER RTT 配置&#xff0c;就再写一下吧。 一、下载并安装JLink 下载&#xff1a; J-Link / J-Trace Downloads 可选择需要的版本下载&#xff1a; 二、SEGGER RTT 包含文件 得到 SEGGER_RTT_V794m.zip …

KTV 包房订房登记表—SAAS本地化及未来之窗行业应用跨平台架构

一、服务员点单 二、服务员自己点单好处 可以自动计算绩效和提成 三、阿雪技术观 拥抱开源与共享&#xff0c;见证科技进步奇迹&#xff0c;畅享人类幸福时光&#xff01; 让我们积极投身于技术共享的浪潮中&#xff0c;不仅仅是作为受益者&#xff0c;更要成为贡献者。无论是…

scene graph generation 计算mean recall数据的过程:

这里写目录标题 前言&#xff1a;计算mean recall的详细过程1. **准备数据**&#xff1a;2. **计算每个类别的recall**&#xff1a;具体代码片段准备groundtruth数据准备预测数据计算recall计算mean recall 前言&#xff1a; 计算流程这里参考maskrcnn_benchmark/data/dataset…

为AppInventor2开发自己的拓展(Extension) - 拓展开发入门篇

//为什么需要开发拓展&#xff1f;// App Inventor 2 是积木式在线安卓开发环境&#xff0c;利用拖拽式的方式实现代码块堆叠&#xff0c;从而完成相应的逻辑。 上手很容易&#xff0c;但是由于代码块提供的功能有限&#xff0c;使用比较单一&#xff0c;在开发上有很大的局限…

计算机视觉的应用32-基于Swin Transformer模型的嵌入混合注意力机制的人脸表情识别的应用

大家好&#xff0c;我是微学AI&#xff0c;今天给大家介绍一下计算机视觉的应用32-基于Swin Transformer模型的嵌入混合注意力机制的人脸表情识别的应用。随着深度学习技术的不断演进&#xff0c;计算机视觉领域迎来了诸多变革&#xff0c;其中 Transformer 架构的引入&#xf…

脑电实验打mark【Eprim中打mark】

文章目录 脑电实验打mark一、端口号查询二、并口打mark 脑电实验打mark 一、端口号查询 右击我的电脑–>管理–>设备管理器–>端口 二、并口打mark 在整个流程最前面添加inline控件&#xff1a; 需要打mark的控件名.onsetsignalenabledTrue //去送信 需要打mark的…

助力汽车零部件产业发展,2025 第十二届广州国际汽车零部件加工技术及汽车模具展览会与您相约“羊城”广州

助力汽车零部件产业发展&#xff0c;2025 第十二届广州国际汽车零部件加工技术及汽车模具展览会与您相约“羊城”广州 汽车零部件是支撑汽车工业持续健康发展的必要因素&#xff0c;为汽车的正常运行和安全性能提供了保障。近年来&#xff0c;中国汽车零部件行业受到各级政府的…