返回顶部
首页 > 资讯 > 数据库 >SpringBoot项目中怎么实现MySQL读写分离
  • 848
分享到

SpringBoot项目中怎么实现MySQL读写分离

2023-07-02 16:07:01 848人浏览 安东尼
摘要

这篇文章主要介绍了SpringBoot项目中怎么实现MySQL读写分离的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇springBoot项目中怎么实现Mysql读写分离文章都会有所收获,下面我们一起来看看吧。1

这篇文章主要介绍了SpringBoot项目中怎么实现MySQL读写分离的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇springBoot项目中怎么实现Mysql读写分离文章都会有所收获,下面我们一起来看看吧。

    1、mysql主从复制

    但我们仔细观察我们会发现,当我们的项目都是用的单体数据库时,那么就可能会存在如下问题:

    • 读和写所有压力都由一台数据库承担, 压力大

    • 数据库服务器磁盘损坏则 数据丢失 ,单点故障

    为了解决上述提到的两个问题,我们可以准备两 (多) 台Mysql,一台主( Master )服务器,一台从( Slave )服务器,主库的 数据变更 (写、更新、删除这些操作) ,需要 同步 到从库中 (主从复制) 。而用户在访问我们项目时,如果是 写操作 (insert、update、delete),则直接操作 主库 ;如果是 读操作 (select) ,则直接操作从库,这种结构就是 读写分离 啦。

    SpringBoot项目中怎么实现MySQL读写分离

    在这种读写分离的结构中,从库是可以有多个的

    1.1、介绍

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

    二进制日志:

    二进制日志(BINLOG)记录了所有的 DDL(数据定义语言)语句和 DML(数据操纵语言)语句,但是不包括数据查询语句。此日志对于灾难时的数据恢复起着极其重要的作用,MySQL的主从复制, 就是通过该binlog实现的。默认MySQL是未开启该日志的。

    MySQL复制过程分成三步:
    • MySQL master 将数据变更写入二进制日志( binary log )

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

    • slave重做中继日志中的事件,将数据变更反映它自己的数据

    SpringBoot项目中怎么实现MySQL读写分离

    1.2、主从库搭建

    在环境搭建之前,我们需要准备好两台服务器,如果生活富裕使用的是两台云服务器的时候记得要开放安全组,即防火墙;如果是比狗子我生活好点但也是用的虚拟机的话,记得别分这么多内存启动蓝屏了(别问怎么知道的)

    这里就不给大家展示数据库的安装和防火墙的操作了,这个我感觉网上好多资源都能够满足遇到的问题,在搭建主从库的时候有在网上见到过说MySQL版本要一致的,我也没太留意直接就在之前的MySQL上操作了,大家可以自己去验证一下。

    1.2.1、主库配置

    服务器:192.168.150.100(别试了黑不了的,这是虚拟机的ip)

    1、修改Mysql数据库的配置文件 vim /etc/my.cnf

    在打开的文件中加入下面两行,其中的server-id不一定是100,确保唯一即可log-bin=mysql-bin   #[必须]启用二进制日志server-id=100       #[必须]服务器唯一ID

    SpringBoot项目中怎么实现MySQL读写分离

    2、重启Mysql服务

    这里有三个方法都能重启MySQL,最简单的无疑就是一关一开:

    net stop mysql;net start mysql;systemctl restart mysqldservice mysqld restart

    3、创建数据同步的用户并授权

    登录进去MySQL之后才能够执行下面的命令,因为这是SQL命令,linux不认识这玩意是啥。

    GRANT REPLICATioN SLAVE ON *.* to '用户名'@'开放的地址' identified by '密码';eg: GRANT REPLICATION SLAVE ON *.* to 'masterDb'@'%' identified by 'Master@123456';记得刷一下权限FLUSH PRIVILEGES;

    4、查看master同步状态

    这个时候还 不用退出MySQL ,因为下面的命令还是SQL命令,执行下面的SQL,可以拿到我们后面需要的两个重要参数。

    show master status;

    SpringBoot项目中怎么实现MySQL读写分离

    执行完这一句SQL之后,==不要再操作主库!不要再操作主库!不要再操作主库!==重要的事情说三遍,因为再操作主库之后可能会导致红框中的 两个属性值会发生变化 ,后面如果发生了错误可能就和这里有那么两毛钱关系了。

    1.2.2、从库配置

    服务器:192.168.150.101(别试了黑不了的,这也是虚拟机的ip)

    1、 修改Mysql数据库的配置文件 vim /etc/my.cnf

    SpringBoot项目中怎么实现MySQL读写分离

    这里要注意server-id和主库以及其他从库都不能相同,否则后面将会配置不成功。

    2、重启Mysql服务

    这里有三个方法都能重启MySQL,最简单的无疑就是一关一开:

    net stop mysql;net start mysql;systemctl restart mysqldservice mysqld restart

    3、设置主库地址及同步位置

    登录进去MySQL之后才能够执行下面的命令,因为这是SQL命令

    设置主库地址和同步位置change master to master_host='192.168.150.100',master_user='masterDb',master_passWord='Master@123456',master_log_file='mysql-bin.000010',master_log_pos=68479;记得记得开启从库配置start slave;

    参数说明:

    • master_host: 主库的 IP地址

    • master_user: 访问主库进行主从复制的 用户名 ( 上面在主库创建的 )

    • master_password: 访问主库进行主从复制的用户名对应的 密码

    • master_log_file: 从哪个 日志文件 开始同步 ( 即1.2.1中第4步获取的 File )

    • master_log_pos: 从指定日志文件的哪个 位置 开始同步 ( 即1.2.1中第4步获取的 Position )

    4、查看从数据库的状态

    这个时候还 不用退出MySQL ,因为下面的命令还是SQL命令,执行下面的SQL,可以看到从库的状态信息。通过状态信息中的 Slave_IO_running 和 Slave_SQL_running 可以看出主从同步是否就绪,如果这两个参数全为 Yes ,表示主从同步已经配置完成。

    show slave status\G;

    SpringBoot项目中怎么实现MySQL读写分离

    1.3、坑位介绍

    1.3.1、UUID报错

    这可能是由于linux 是复制出来的,MySQL中还有一个 server_uuid 是一样的,我们也需要修改。 vim /var/lib/mysql/auto.cnf

    SpringBoot项目中怎么实现MySQL读写分离

    1.3.2、server_id报错

    这应该就是各位大牛设置server_id的时候不小心设置相同的id了,修改过来就行,步骤在上面的配置中。

    1.3.3、同步异常解决

    这是狗子在操作过程中搞出来的一个错误……

    出错的原因是在主库中删除了用户信息,但是在从库中同步的时候失败导致同步停止,下面记录自己的操作(是在进入MySQL的操作且是从库)。

    MASTER_LOG_POS
    STOP SLAVE;SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1;START SLAVE;SHOW SLAVE STATUS\G;

    在数据库中操作时,一定要注意当前所在的数据库是哪个,作为一个良好的实践:在SQL语句前加 USE dbname 。

    操作不规范,亲人两行泪……

    2、项目中实现

    2.1、ShardingJDBC

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

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

    Sharding-JDBC具有以下几个特点:

    • 适用于任何基于JDBC的ORM框架,如:JPA, Hibernate, mybatis, Spring JDBC Template或直接使用JDBC。

    • 支持任何第三方的数据库连接池,如:DBCP, C3P0, BoneCP, Druid, HikariCP等。

    • 支持任意实现JDBC规范的数据库。目前支持MySQL,oracle,SQLServer,postgresql以及任何遵循SQL92标准的数据库。

    下面我们将用ShardingJDBC在项目中实现MySQL的读写分离。

    2.2、依赖导入

    在pom.xml文件中导入ShardingJDBC的依赖坐标

    <!--sharding-jdbc--><dependency>    <groupId>org.apache.shardingsphere</groupId>    <artifactId>sharding-jdbc-spring-boot-starter</artifactId>    <version>4.0.0-RC1</version></dependency>

    2.3、配置文件

    在application.yml中增加数据源的配置

    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.150.100:3306/db_test?useUnicode=true&characterEncoding=utf-8&useSSL=false        username: root        password: 123456      # 从数据源      slave:        type: com.alibaba.druid.pool.DruidDataSource        driver-class-name: com.mysql.cj.jdbc.Driver        url: jdbc:mysql://192.168.150.101:3306/db_test?useUnicode=true&characterEncoding=utf-8&useSSL=false        username: root        password: 123456    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  # 覆盖注册bean,后面创建数据源会覆盖前面创建的数据源  main:    allow-bean-definition-overriding: true

    2.4、测试跑路

    这时我们就可以对我们项目中的配置进行一个测试,下面分别调用一个更新接口和一个查询接口,通过查看日志中记录的数据源来判断是否能够按照我们预料中的跑。

    • 更新操作(写操作)

    SpringBoot项目中怎么实现MySQL读写分离

    • 查询操作(读操作)

    SpringBoot项目中怎么实现MySQL读写分离

    搞定!!!程序正常按照我们预期的成功跑起来了,成功借助ShardingJDBC在我们项目中实现了数据库的读写分离。

    关于“SpringBoot项目中怎么实现MySQL读写分离”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“SpringBoot项目中怎么实现MySQL读写分离”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注编程网数据库频道。

    您可能感兴趣的文档:

    --结束END--

    本文标题: SpringBoot项目中怎么实现MySQL读写分离

    本文链接: https://lsjlt.com/news/343131.html(转载时请注明来源链接)

    有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

    猜你喜欢
    • SpringBoot项目中怎么实现MySQL读写分离
      这篇文章主要介绍了SpringBoot项目中怎么实现MySQL读写分离的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇SpringBoot项目中怎么实现MySQL读写分离文章都会有所收获,下面我们一起来看看吧。1...
      99+
      2023-07-02
    • SpringBoot项目中如何实现MySQL读写分离
      这篇“SpringBoot项目中如何实现MySQL读写分离”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“SpringBoot...
      99+
      2023-07-06
    • SpringBoot项目中如何实现MySQL读写分离详解
      目录1、MySQL主从复制1.1、介绍二进制日志:MySQL复制过程分成三步:1.2、主从库搭建1.2.1、主库配置1.2.2、从库配置1.3、坑位介绍1.3.1、UUID报错1.3...
      99+
      2024-04-02
    • SpringBoot怎么实现读写分离
      这篇文章主要讲解了“SpringBoot怎么实现读写分离”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“SpringBoot怎么实现读写分离”吧!前言根据公司业务需求,项目需要读写分离,所以记...
      99+
      2023-06-30
    • 怎么实现mysql读写分离
      这篇文章主要介绍“怎么实现mysql读写分离”,在日常操作中,相信很多人在怎么实现mysql读写分离问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么实现mysql读写分离”...
      99+
      2024-04-02
    • mysql读写分离在项目实践中的应用
      工程背景介绍: 我们开发了一个万能接口,用户通过这个接口中传入数据,我们拿到数据进行复杂的逻辑处理然后再将数据各种匹配展示分发等操作,处理的流程相当庞大,接口中我们只保留了接收数据和返回一个本次请求的id的操作,其余操作都是异步到其他...
      99+
      2020-10-22
      mysql读写分离在项目实践中的应用
    • SpringBoot中怎么利用MyCat实现读写分离
      SpringBoot中怎么利用MyCat实现读写分离,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。MySQL配置主从关系说明 192.168.0.10...
      99+
      2023-06-16
    • SpringBoot详解MySQL如何实现读写分离
      目录前言一、主从数据源的配置二、数据源路由的配置三、数据源上下文环境四、切换注解和Aop配置五、用法以及测试六、总结前言 首先思考一个问题:在高并发的场景中,关于数据库都有哪些优化的...
      99+
      2024-04-02
    • SpringBoot中怎么实现一个读写分离组件
      这期内容当中小编将会给大家带来有关SpringBoot中怎么实现一个读写分离组件,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。1.pom.xml配置文件<depen...
      99+
      2024-04-02
    • php中怎么实现Mysql读写分离操作
      php中怎么实现Mysql读写分离操作,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。连接案例:<php require...
      99+
      2024-04-02
    • 基于 SpringBoot 实现 MySQL 读写分离的问题
      -     前言     - 首先思考一个问题: 在高并发的场景中,关于数据库都有哪些优化的手段? 常用的实现方法有以下几种:读写分离、加缓存、主从架构集...
      99+
      2022-05-21
      SpringBoot 实现 MySQL 读写分离 SpringBoot 读写分离
    • SpringBoot中怎么利用Sharding-JDBC实现MySQL8读写分离
      这篇文章将为大家详细讲解有关SpringBoot中怎么利用Sharding-JDBC实现MySQL8读写分离,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。一.前言这是一个基于SpringBo...
      99+
      2023-06-20
    • MyCat中怎么实现读写分离
      这期内容当中小编将会给大家带来有关MyCat中怎么实现读写分离,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。1、mycat实现读写分离这里没有用到mysql03主机,读写...
      99+
      2024-04-02
    • mybatis中怎么实现读写分离
      本篇文章为大家展示了mybatis中怎么实现读写分离,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。1、spring aop实现首先application-test.yml增加如下数据源的配置spri...
      99+
      2023-06-20
    • mysql+mycat实现读写分离
      centos7 master slave mycat1.6 client 192.168.41.10 192.168.41.11 192.168.41.12 192.168.41.13 ...
      99+
      2024-04-02
    • SpringBoot+ShardingSphereJDBC实现读写分离详情
      目录1 概述2 环境3 一些基础理论3.1 读写分离3.2 主从复制3.3 数据库中间件简介4MySQL主从复制环境准备4.1 主库操作4.1.1 拉取镜像并创建容器运行4.1.2 ...
      99+
      2022-11-13
      SpringBoot读写分离 ShardingSphereJDBC读写分离
    • MySQL中如何实现读写分离
      MySQL中如何实现读写分离,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。一,创建Master数据库的配置文件vi master...
      99+
      2024-04-02
    • 使用Django怎么实现MySQL读写分离
      本篇文章为大家展示了使用Django怎么实现MySQL读写分离,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。主从同步介绍和优点在多台数据服务器中,分为主服务器和从服...
      99+
      2024-04-02
    • 使用Mycat怎么实现MySQL读写分离
      今天就跟大家聊聊有关使用Mycat怎么实现MySQL读写分离,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。搭建环境操作系统:CentOS-6.5-x...
      99+
      2024-04-02
    • 浅析php+mysql怎么实现读写分离
      MySQL作为目前最流行的数据库之一,在应用中大量被使用。在高并发和数据量较大的情况下,由于MySQL的读写并发性能不足,为了提高MySQL的并发性能,读写分离成为了必要的方案。读写分离的原理是将读操作和写操作分别放在不同的MySQL实例上...
      99+
      2023-05-14
      读写分离 php mysql
    软考高级职称资格查询
    编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
    • 官方手机版

    • 微信公众号

    • 商务合作