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

瑞吉外卖—读写分离

文章目录

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

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

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 机器学习:opencv图像识别--模版匹配
  • 华为OD机试真题E卷-计算网络信号(含题目描述+解题思路+代码解析)
  • 前端打包装包——设置镜像
  • 机试算法模拟题 服务中心选址
  • 利用命令模式构建高效的手游后端架构
  • Reflection反射——Class类
  • 大模型训练数据库Common Crawl
  • Python判断两张图片的相似度
  • 汽车免拆诊断案例 | 2013款捷豹XF车偶尔无法起动
  • Jupyter Notebook 修改默认路径
  • 【Linux】:信号的保存和信号处理
  • CCF推荐C类会议和期刊总结:(计算机体系结构/并行与分布计算/存储系统领域)
  • macos 系统文件操作时提示 Read-only file system 解决方法
  • 计算机网络--第六章应用层
  • React实现虚拟列表的优秀库介绍
  • centos安装java运行环境jdk+tomcat
  • Docker: 容器互访的三种方式
  • exif信息对照
  • Git的一些常用操作
  • Java知识点总结(JDBC-连接步骤及CRUD)
  • open-falcon 开发笔记(一):从零开始搭建虚拟服务器和监测环境
  • Python打包系统简单入门
  • Theano - 导数
  • 笨办法学C 练习34:动态数组
  • 浮动相关
  • 前端每日实战:70# 视频演示如何用纯 CSS 创作一只徘徊的果冻怪兽
  • 我从编程教室毕业
  • 吴恩达Deep Learning课程练习题参考答案——R语言版
  • 在weex里面使用chart图表
  • 中文输入法与React文本输入框的问题与解决方案
  • 主流的CSS水平和垂直居中技术大全
  • Spring Batch JSON 支持
  • 仓管云——企业云erp功能有哪些?
  • ​软考-高级-信息系统项目管理师教程 第四版【第14章-项目沟通管理-思维导图】​
  • # Redis 入门到精通(八)-- 服务器配置-redis.conf配置与高级数据类型
  • (02)Unity使用在线AI大模型(调用Python)
  • (2)nginx 安装、启停
  • (3)选择元素——(14)接触DOM元素(Accessing DOM elements)
  • (6)添加vue-cookie
  • (CPU/GPU)粒子继承贴图颜色发射
  • (day18) leetcode 204.计数质数
  • (附源码)php投票系统 毕业设计 121500
  • (附源码)springboot工单管理系统 毕业设计 964158
  • (附源码)springboot学生选课系统 毕业设计 612555
  • (免费领源码)python#django#mysql校园校园宿舍管理系统84831-计算机毕业设计项目选题推荐
  • (三)Kafka 监控之 Streams 监控(Streams Monitoring)和其他
  • (生成器)yield与(迭代器)generator
  • (一) storm的集群安装与配置
  • (转)EXC_BREAKPOINT僵尸错误
  • (转)MVC3 类型“System.Web.Mvc.ModelClientValidationRule”同时存在
  • (转载)PyTorch代码规范最佳实践和样式指南
  • (转载)虚幻引擎3--【UnrealScript教程】章节一:20.location和rotation
  • .NET/C# 使用 SpanT 为字符串处理提升性能
  • ::before和::after 常见的用法
  • @JSONField或@JsonProperty注解使用