项目实现读写分离操作(mysql)

读写分离

1.问题说明

在这里插入图片描述

2.读写分离

在这里插入图片描述

Master(主库)----(数据同步)—> Slave(从库) Mysql主从复制

  • mysql主从复制

    1. 介绍

      • mysql主从复制是一个异步的复制过程,底层是基于mysql数据库自带的二进制日志功能。就是一台或多台mysql数据库(Slave,即从库)从另一台mysql数据库(Master,即主库)进行日志的复制然后再解析日志并应用到自身,最终现实从库的数据和主库的数据保持一致。mysql主从复制是mysql数据库自带功能,无需借助第三方工具
      • mysql复制过程分成三步:
        • Master将改变记录二进制日志(binary log)
        • Slave将Master的binary log拷贝到它的中继日志(relay log)
        • Slave重做中继日志中的事件,将改变应用到自己的数据库中
        • 在这里插入图片描述
    2. 配置

      • 配置–前置条件

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

        • 主库Master 服务器ip
        • 从库Slave 服务器ip
      • 配置-主库Master

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

        [mysqld]

        log-bin=mysql-bin #[必须]启用二进制日志

        server-id = 100 #[必须]服务器–ID

        第二步:重启mysql服务

        systemctl restart mysqld

        第三步:登录mysql数据库,执行下面sql

        GRANT REOLICATION SLAVE ON *.* to 'xiaoming'@'%' identified by 'Root@123456';
        
        • ==注:==上面sql的作用是创建一个用户xiaoming。密码Root@123456,并且给xiaoming用户授予REPLICATION SLAVE权限,常用于建立复制时所需要用到的用户权限,也就是Slave必须被Master授权具有该权限的用户,才能通过该用户复制。

        报错-----解决如下:

        mysql> GRANT REOLICATION SLAVE ON *.* to 'xiaoming'@'%' identified by 'Root@123456';
        ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'REOLICATION SLAVE ON *.* to 'xiaoming'@'%' identified by 'Root@123456'' at line 1
        
        mysql> create user xiaoming identified by 'Root@123456'
            -> ;
        Query OK, 0 rows affected (0.00 sec)
        
        mysql> grant replication slave on *.* to xiaoming
            -> ;
        Query OK, 0 rows affected (0.00 sec)
        

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

        show master status;
        

        在这里插入图片描述

        ==注意:==上面sql的作用是查看Master的状态,执行完此sql后不要再执行任何操作

      • 配置–从库Slave

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

        server-id = 101  #[必须]服务器--ID
        

        第二步:重启mysql服务

        systemctl restart mysqld
        

        第三步:登录MySQL数据库,执行下面sql

        change master to 
        master_host='(主库ip地址)',master_user='xiaoming',master_password='Root@123456',master_log_file='mysql-bin.000001',master_log_pos=603;
        
        start slave;
        

        ==注意:==如果报a running slave io thread的错!那么我们需要使用 stop slave;来停止这个异常

        第四步:登录mysql数据库,执行下面sql,查看从数据库的状态

        show slave status;
        

      在这里插入图片描述

  • 读写分离案例

    • 背景

      背景

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

在这里插入图片描述

  • sharding-JDBC介绍

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

    使用sharding-JDBC可以在程序中轻松的实现数据库读写分离。

    • 适用于任何基于JDBC的ORM框架:JPA,Hibernate,MyBatis,Spring JDBC Template或直接使用JDBC。
    • 支持任何第三方的数据库连接池,如:DBCP,C3P0,BoneCP,Druid,HikariCP等。
    • 支持任意实现JDBC规范的数据库,目前支持MySQL,Oracle,SQLServer,PostgreSQL以及任何遵循SQL92标准的数据库
    <dependency>
                <groupId>org.apache.shardingsphere</groupId>
                <artifactId>sharding-jdbc-spring-boot-starter</artifactId>
                <version>4.0.0-RC1</version>
    </dependency>
    
  • 入门案例

    使用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://(主库ip地址):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://127.0.0.1:3306/rw?characterEncoding=utf-8
              username: root
              password: 12345678
          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
        main:
          allow-bean-definition-overriding: true
      
    3. 在配置文件中配置允许bean定义覆盖配置项

      main:
          allow-bean-definition-overriding: true
      
  • 功能测试

    查询功能测试(操作Slave)

在这里插入图片描述

插入数据功能测试(操作Master)

在这里插入图片描述

  • 项目实现读写分离

    • 数据库环境准备(主从复制)
    • 代码改造
    • 功能测试

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

算法套路十七——买卖股票问题:状态机 DP

算法套路十七——买卖股票问题&#xff1a;状态机 DP 状态机DP是一种将动态规划方法应用于有限状态机&#xff08;Finite State Machine&#xff09;的问题求解方法。 状态机DP&#xff08;State Machine DP&#xff09;是一种动态规划的思想&#xff0c;它通常用于解决一些具…

如何应用金字塔模型提高结构化表达能力

看一下结构化表达的定义&#xff1a; 结构化表达&#xff1a;是基于结构化思维&#xff0c;理清事物整理与部分之间关系、换位思考后&#xff0c;进行简洁、清晰和有信服力的表达&#xff0c;是一种让受众听得明白、记得清楚、产生认同的精益沟通方式。 结构化表达的基本原则是…

总结如何申请注册 GitHub 教师教育优惠 Benefits for Teachers 来免费使用 copilot

目录 1. GitHub 教师教育优惠有什么2. 如何申请教师教育优惠呢2.1 选择学校2.2 更改个人信息2.3 准备证明材料2.4 提交申请2.5 遇到的问题2.5.1 问题 12.5.2 问题 22.5.3 问题 3 3. 申请免费的 GitHub Copilot 学生注册不在此处赘述了&#xff0c;网上有很多教程可以参考。但是…

前端BFC

一、首先我们要先了解常见的定位方案&#xff0c;总共3种&#xff08;普通流、浮动、绝对定位&#xff09; 而BFC是属于普通流的 我们可以把BFC看作为页面的一块渲染区域&#xff0c;他有着自己的渲染规则 简单来说BFC可以看作元素的一种属性&#xff0c;当元素拥有了BFC属性…

Python os模块详解

1. 简介 os就是“operating system”的缩写&#xff0c;顾名思义&#xff0c;os模块提供的就是各种 Python 程序与操作系统进行交互的接口。通过使用os模块&#xff0c;一方面可以方便地与操作系统进行交互&#xff0c;另一方面页也可以极大增强代码的可移植性。如果该模块中相…

二叉堆讲解

二叉堆讲解 大顶堆和小顶堆 从二叉堆的结构说起&#xff0c;它是一棵二叉树&#xff0c;并且是完全二叉树&#xff0c;每个结点中存有一个元素&#xff08;或者说&#xff0c;有个权值&#xff09;。 堆性质&#xff1a;父亲的权值不小于儿子的权值&#xff08;大根堆&#x…

什么是JS事件流

什么是JS事件流? 一&#xff1a;事件冒泡 <!DOCTYPE html> <html lang"en"> <head><title>事件冒泡例子</title> </head> <body><div id"box">点击我</div> </body> </html>上述的代…

利用暴力攻击破解登陆密码

长久以来&#xff0c;入侵远程计算机系统的工具和技术并没有发生翻天覆地的变化。例如&#xff0c;在许多情况下&#xff0c;普通用户只要知道了相关密码&#xff0c;就能立刻变身为管理员。虽然这些情形听起来不够曲折&#xff0c;但在大多数情况下&#xff0c;暴力攻击是通过…

css3 flex弹性布局详解

css3 flex弹性布局详解 一、flexbox弹性盒子 2009年&#xff0c;W3C 提出了一种新的方案----Flex 布局&#xff0c;可以简便、完整、响应式地实现各种页面布局。目前&#xff0c;它已经得到了所有浏览器的支持&#xff0c;这意味着&#xff0c;现在就能很安全地使用这项功能。…

【一起啃书】《机器学习》第五章 神经网络

文章目录 第五章 神经网络5.1 神经元模型5.2 感知机与多层网络5.3 误差逆传播算法5.4 全局最小与局部极小5.5 其他常见神经网络5.6 深度学习 第五章 神经网络 5.1 神经元模型 神经网络是由具有适应性简单单元组成的广泛并行互连的网络&#xff0c;它的组织能够模拟生物神经系统…

生产流程图怎么制作?思路提供

生产流程图是一种图表&#xff0c;用来展示生产流程中的各个环节及其顺序。这种图表可以帮助企业管理者更好地了解生产过程中的各个环节&#xff0c;从而更好地进行管理和优化。生产流程图通常包括各个生产环节的名称、所需时间、参与人员、设备和工具等信息。 在制作生产流程图…

七大软件架构设计原则详解

目录 1、概述 2、七大设计原则 2.1、开闭原则 2.2、里氏替换原则 2.3、依赖倒置原则 2.4、单一职责原则 2.5、接口隔离原则 2.6、迪米特法则 2.7、合成复用原则 3、最后 VC常用功能开发汇总&#xff08;专栏文章列表&#xff0c;欢迎订阅&#xff0c;持续更新...&…

基于jdk1.8的Java服务监控和性能调优

JVM的参数类型 X参数 非标准参数-Xint: 解释执行-Xcomp: 第一次使用就编译成本地代码-Xmixed: JVM自己来决定是否编译成本地代码 默认使用的是mixed mode 用的不多, 只需要做了解, 用的比较多的是XX参数 XX参数 非标准化参数相对不稳定主要用来JVM调优和Debug Boolean: …

【Vue3+TS项目】硅谷甄选day02--后台管理系统模板搭建/项目配置

1 项目初始化 一个项目要有统一的规范&#xff0c;需要使用eslintstylelintprettier来对我们的代码质量做检测和修复&#xff0c;需要使用husky来做commit拦截&#xff0c;需要使用commitlint来统一提交规范&#xff0c;需要使用preinstall来统一包管理工具。 1.1 环境准备 n…

阿里云u1服务器通用算力型CPU处理器性能测评

阿里云服务器u1通用算力型Universal实例高性价比&#xff0c;CPU采用Intel(R) Xeon(R) Platinum&#xff0c;主频是2.5 GHz&#xff0c;云服务器U1实例的基准vCPU算力与5代企业级实例持平&#xff0c;最高vCPU算力与6代企业级实例持平&#xff0c;提供2c-32c规格和1:1/2/4/8丰富…

elasticsearch结构化查询(一)

在上一篇中我们介绍了DSL相关的知识&#xff0c;接下来我们将会学习elasticsearch的结构化查询&#xff0c;同时也实践一下上一篇的DSL的查询用法 什么是结构化搜索? 从《Elasticsearch权威指南》上摘取部分解释如下: 结构化搜索是指查询包含内部结构的数据。日期&#xff0…

MATLAB 之 函数文件、特殊形式的函数和程序调试与优化

文章目录 一、函数文件1. 函数文件的基本结构2. 函数调用2.1 函数调用的格式2.2 函数的递归调用2.3 函数参数的可调性2.4 全局变量与局部变量 二、特殊形式的函数1. 子函数2. 内联函数3. 匿名函数 三、程序调试与优化1. 程序调试方法1.1 利用调试函数进行程序测试1.2 利用调试工…

MySQL数据库,JDBC连接数据库操作流程详细介绍

前言&#xff1a; 在学完 MySQL 和 Java 后&#xff0c;我们通常会尝试使用 Java编译器 连接 MySQL数据库&#xff0c;从而达到使用编译器来操作数据库的效果。连接的这个过程会用 JDBC 相关知识&#xff0c;因此我把 JDBC 包的下载及导入流程&#xff0c;以及 JDBC 的使用流程…

1.Buffer_Overflow-1.Basic_Jump

github上面的练习题 git clone https://github.com/Adamkadaban/LearnPwn 然后开始做 先进行 readelf 然后进行执行看看 是怎么回事 ./buf1发现就是一个输入和输出 我们checksec看看 发现stack 保护关闭 开启了NX保护 我们进入ida64看看反汇编 我习惯先看看字符串 SHITF…

C#异步编程之数据并行及任务并行

基于Parallel.ForEach的数据并行使用 1.数据非并行 var items new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9 }; DateTime t1 DateTime.Now; foreach (var item in items) {Console.WriteLine("数据非并行输出:{0}", item); } 2.数据并行,只要使用Parallel.ForEach P…