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

项目实现读写分离操作(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 1mysql> 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.DruidDataSourcedriver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://(主库ip地址):3306/rw?characterEncoding=utf-8username: rootpassword: root# 从数据源slave:type: com.alibaba.druid.pool.DruidDataSourcedriver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://127.0.0.1:3306/rw?characterEncoding=utf-8username: rootpassword: 12345678masterslave:# 读写分离配置load-balance-algorithm-type: round_robin #轮询# 最终的数据源名称name: dataSource# 主库数据源名称master-data-source-name: master# 从库数据源名称列表,多个逗号分隔slave-data-source-names: slaveprops:sql:show: true #开启SQL显示,默认falsemain:allow-bean-definition-overriding: true
      
    3. 在配置文件中配置允许bean定义覆盖配置项

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

    查询功能测试(操作Slave)

在这里插入图片描述

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

在这里插入图片描述

  • 项目实现读写分离

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

相关文章:

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

读写分离 1.问题说明 2.读写分离 Master&#xff08;主库&#xff09;----(数据同步)—> Slave&#xff08;从库&#xff09; Mysql主从复制 mysql主从复制 介绍 mysql主从复制是一个异步的复制过程&#xff0c;底层是基于mysql数据库自带的二进制日志功能。就是一台或多台…...

VP记录:Educational Codeforces Round 148 (Rated for Div. 2) A~D1

传送门:CF 前题提要:本人临近期中,时间较紧,且关于D2暂时没有想到优化算法,因此准备留着以后有时间再继续解决 A题:A. New Palindrome 简单的模拟题,考虑记录每一个字母出现的次数.很容易发现奇数次的数字只能出现一次.因为最多只能在正中间放一个.并且因为不能和初始字符相…...

无线模块|如何选择天线和设计天线电路

无线模块的通信距离是一项重要指标&#xff0c;如何把有效通信距离最大化一直是大家疑惑的问题。本文根据调试经验及对天线的选择与使用方法做了一些说明&#xff0c;希望对工程师快速调试通信距离有所帮助。 一、天线的种类 随着技术的进步&#xff0c;为了节省研发周期&…...

(11)LCD1602液晶显示屏

LCD1602&#xff08;Liquid Crystal Display&#xff09;液晶显示屏是一种字符型液晶显示模块&#xff0c;可以显示ASCII码的标准字符和其它的一些内置特殊字符&#xff0c;还可以有8个自定义字符&#xff0c;自带芯片扫描 显示容量&#xff1a;162个字符&#xff0c;每个字符…...

类和对象下

文章目录 一、初始化列表1、语法&#xff1a;2、初始化顺序 二、static成员三、友元1、友元函数2、友元类 四、拷贝对象时的编译器优化例1、例2、例3、 一、初始化列表 1、语法&#xff1a; 初始化列表&#xff1a; 以一个冒号开始&#xff0c;接着是一个以逗号分隔的数据成员…...

【云计算•云原生】4.云原生之什么是Kubernetes

文章目录 Kubernetes概念Kubernetes核心概念集群podConfigMap Kubernetes架构master节点的组件worker节点组件 Kubernetes网络架构内部网络外部网络 k8s各端口含义 Kubernetes概念 K8S就是Kubernetes&#xff0c;Kubernetes首字母为K&#xff0c;末尾为s&#xff0c;中间一共有…...

云厂商降价潮背后:来中小企业战场「拼刺刀」

如果说过往云厂商的降价打响的是从C端进军B端的营销战&#xff0c;那么在这一轮降价潮背后&#xff0c;对应的则是云厂商从大型KA客户向中小企业进军的信号&#xff0c;强被集成&#xff0c;强获客。 云厂商又一轮降价潮袭来。 5月16日&#xff0c;移动云宣布部分产品线最高降…...

2-单片机GPIO相关知识点及流水灯和按键采集小实验

目录 小问题 &#xff1a;单片机上电后第一个执行的程序是&#xff1f; 【1】GPIO 1.定义 2.应用 I - Input 输入采集 O - Output 输出控制 3.GPIO结构框图 4.功能描述 输入功能 5.相关寄存器 【2】输出控制实验 实验&#xff1a;点亮一盏LED灯 1.实验…...

基础知识(王爽老师书第一章)

文章目录 基础知识1.1 引言1.2 机器语言1.2 引言汇编语言的产生1.3 汇编语言的组成1.4 存储器1.5 指令和数据1.6 存储单元1.7 CPU对存储器的读写1.8 地址总线1.9 数据总线1.10 控制总线小结检测点1.11.11 内存地址空间1.12 主板1.13 接口卡1.14 各类存储器芯片1.15 内存地址空间…...

非煤矿山电子封条建设算法 yolov8

非煤矿山电子封条建设算法模型通过yolov8网络模型AI视频智能分析技术&#xff0c;算法模型对作业状态以及出井入井人员数量变化、人员睡岗离岗等情况实时监测分析&#xff0c;及时发现异常动态&#xff0c;自动推送生成的违规截图报警信息。现代目标检测器大部分都会在正负样本…...

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

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

【Python入门】Python循环语句(while循环的嵌套应用)

前言 &#x1f4d5;作者简介&#xff1a;热爱跑步的恒川&#xff0c;致力于C/C、Java、Python等多编程语言&#xff0c;热爱跑步&#xff0c;喜爱音乐的一位博主。 &#x1f4d7;本文收录于Python零基础入门系列&#xff0c;本专栏主要内容为Python基础语法、判断、循环语句、函…...

数据来源和搜集

数据搜集 文章目录 数据搜集1 数据来源1.1 数据的间接来源1.2 间接数据的评价1.3 数据的直接来源 2 调查数据2.1概率抽样2.2 非概率抽样2.3 概率抽样 *vs.*非概率抽样 3 搜集数据的方法4 实验数据4.1 实验组与对照组4.2 实验中的若干问题 1 数据来源 所有统计数据都来源于社会…...

Python入门(七)if语句(二)

if语句&#xff08;二&#xff09; 1.if语句1.1 简单的if语句1.2 if-else语句1.3 if-elif-else结构1.4 使用多个elif代码块1.5 使用多个elif代码块 2.使用if语句处理列表2.1 检查特殊元素2.2 确定列表不是空的2.3 使用多个列表 作者&#xff1a;xiou 1.if语句 前面我们理解了…...

[元带你学: eMMC完全解读 2] eMMC协议相关术语与定义

声明 主页:元存储的博客_CSDN博客 依公开知识及经验整理,如有误请留言。 个人辛苦整理,付费内容,禁止转载。 所在专栏 《元带你学: eMMC完全解读》 内容摘要 前言 文中列出了常用和不常用的eMMC 术语, 只需要了解常用术语就完全够用, 非常用术语几乎都用不上,只要遇到的…...

预测杭州五一黄金周的旅游出行人数

对于杭州五一黄金周的旅游出行人数的预测&#xff0c;可以从以下几个方面进行考虑。 一、历史数据的分析 杭州作为一个旅游胜地&#xff0c;每年的五一黄金周都吸引了大量的游客前来游玩。历史数据可以为我们提供有用的信息&#xff0c;帮助我们预测今年的旅游出行人数。 1.…...

内防泄密重要,还是外防窃密重要?

内防泄密是组织为防止内部敏感信息未经授权泄露所采取的各种管理与技术措施的总称。它主要针对内部人员的信息访问与操作行为进行管控,减少故意或疏忽泄密事件的发生几率。 内防泄密的工作&#xff0c;通常包括员工管理、权限管控、监控检查、分级保护、离岗管控、技术防护、事…...

ChatGPT:2. 使用OpenAI创建自己的AI网站:1. 初探API

使用OpenAI创建自己的AI网站 如果你还是一个OpenAI的小白&#xff0c;有OpenAI的账号&#xff0c;但想调用OpenAI的API搞一些有意思的事&#xff0c;那么这一系列的教程将仔细的为你讲解如何使用OpenAI的API制作属于自己的AI网站。博主只能利用下班时间更新&#xff0c;进度慢…...

5月17日,今日信息差

​1、中老铁路运输货物突破2000万吨。其中&#xff0c;跨境货运量超400万吨&#xff0c;货值达177亿元 2、北京首个5.5G实验基站在昌平区的国际信息港建设开通&#xff0c;5.5G将在速率、时延、连接规模和能耗方面全面超越现有5G&#xff0c;实现下行万兆和上行千兆的峰值速率…...

物联网的体系架构

物联网中常见的计算模式&#xff1a;云计算、边缘计算、雾计算等 云计算&#xff1a;一种利用互联网实现随时随地、按需、便捷地使用共享计算设施、存储设备、应用程序等资源的计算模式。边缘计算&#xff1a;在靠近物或数据源头的网络边缘侧&#xff0c;融合网络、计算、存储…...

突破不可导策略的训练难题:零阶优化与强化学习的深度嵌合

强化学习&#xff08;Reinforcement Learning, RL&#xff09;是工业领域智能控制的重要方法。它的基本原理是将最优控制问题建模为马尔可夫决策过程&#xff0c;然后使用强化学习的Actor-Critic机制&#xff08;中文译作“知行互动”机制&#xff09;&#xff0c;逐步迭代求解…...

PHP和Node.js哪个更爽?

先说结论&#xff0c;rust完胜。 php&#xff1a;laravel&#xff0c;swoole&#xff0c;webman&#xff0c;最开始在苏宁的时候写了几年php&#xff0c;当时觉得php真的是世界上最好的语言&#xff0c;因为当初活在舒适圈里&#xff0c;不愿意跳出来&#xff0c;就好比当初活在…...

376. Wiggle Subsequence

376. Wiggle Subsequence 代码 class Solution { public:int wiggleMaxLength(vector<int>& nums) {int n nums.size();int res 1;int prediff 0;int curdiff 0;for(int i 0;i < n-1;i){curdiff nums[i1] - nums[i];if( (prediff > 0 && curdif…...

NFT模式:数字资产确权与链游经济系统构建

NFT模式&#xff1a;数字资产确权与链游经济系统构建 ——从技术架构到可持续生态的范式革命 一、确权技术革新&#xff1a;构建可信数字资产基石 1. 区块链底层架构的进化 跨链互操作协议&#xff1a;基于LayerZero协议实现以太坊、Solana等公链资产互通&#xff0c;通过零知…...

ArcGIS Pro制作水平横向图例+多级标注

今天介绍下载ArcGIS Pro中如何设置水平横向图例。 之前我们介绍了ArcGIS的横向图例制作&#xff1a;ArcGIS横向、多列图例、顺序重排、符号居中、批量更改图例符号等等&#xff08;ArcGIS出图图例8大技巧&#xff09;&#xff0c;那这次我们看看ArcGIS Pro如何更加快捷的操作。…...

深度学习习题2

1.如果增加神经网络的宽度&#xff0c;精确度会增加到一个特定阈值后&#xff0c;便开始降低。造成这一现象的可能原因是什么&#xff1f; A、即使增加卷积核的数量&#xff0c;只有少部分的核会被用作预测 B、当卷积核数量增加时&#xff0c;神经网络的预测能力会降低 C、当卷…...

佰力博科技与您探讨热释电测量的几种方法

热释电的测量主要涉及热释电系数的测定&#xff0c;这是表征热释电材料性能的重要参数。热释电系数的测量方法主要包括静态法、动态法和积分电荷法。其中&#xff0c;积分电荷法最为常用&#xff0c;其原理是通过测量在电容器上积累的热释电电荷&#xff0c;从而确定热释电系数…...

七、数据库的完整性

七、数据库的完整性 主要内容 7.1 数据库的完整性概述 7.2 实体完整性 7.3 参照完整性 7.4 用户定义的完整性 7.5 触发器 7.6 SQL Server中数据库完整性的实现 7.7 小结 7.1 数据库的完整性概述 数据库完整性的含义 正确性 指数据的合法性 有效性 指数据是否属于所定…...

人工智能(大型语言模型 LLMs)对不同学科的影响以及由此产生的新学习方式

今天是关于AI如何在教学中增强学生的学习体验&#xff0c;我把重要信息标红了。人文学科的价值被低估了 ⬇️ 转型与必要性 人工智能正在深刻地改变教育&#xff0c;这并非炒作&#xff0c;而是已经发生的巨大变革。教育机构和教育者不能忽视它&#xff0c;试图简单地禁止学生使…...

C++实现分布式网络通信框架RPC(2)——rpc发布端

有了上篇文章的项目的基本知识的了解&#xff0c;现在我们就开始构建项目。 目录 一、构建工程目录 二、本地服务发布成RPC服务 2.1理解RPC发布 2.2实现 三、Mprpc框架的基础类设计 3.1框架的初始化类 MprpcApplication 代码实现 3.2读取配置文件类 MprpcConfig 代码实现…...