返回顶部
首页 > 资讯 > 数据库 >SpringBoot环境-MySQL主从复制,读写分离的实现
  • 948
分享到

SpringBoot环境-MySQL主从复制,读写分离的实现

mysql数据库javalinux 2023-09-06 22:09:58 948人浏览 八月长安
摘要

目录 概述 环境 主从复制 读写分离 概述  记录在MySQL数据库中主从复制以及SpringBoot环境操作MySQL数据库读写分离的实现步骤。  背景 :因为我们在对数据库进行操作时,如果读写操作都由一台数据库承担的话压

目录

概述

环境

主从复制

读写分离


概述

 记录在MySQL数据库中主从复制以及SpringBoot环境操作MySQL数据库读写分离的实现步骤。

 背景 :因为我们在对数据库进行操作时,如果读写操作都由一台数据库承担的话压力会比较大,为了减轻数据库压力,我们可以使用多个数据库一起工作,进行读写的分离操作。

操作 : 利用两台linux主机分别安装Mysql数据库进行模拟测试,一个数据库处理"读"(select)操作,另一个处理"写"(save,update,delete)操作,创建SpringBoot项目利用mybatisPlus框架对数据库进行简易测试,对读写分离进行测试。

 前提 虚拟机创建两台linux主机模拟两台不同服务器,两个主机分别安装mysql数据库模拟主库和从库,以及创建一个简单的springBoot项目来对读写分离进行测试。

环境

检查IP地址以及mysql的安装。

主机一:192.168.1.233 简称主机233(作为主库)

 主机二:192.168.1.234 简称主机234(作为从库)

主从复制

主从复制原理简介: Mysql主从复制是一个异步复制的过程,底层是基于MySQL数据库自带的二进制日志功能。就是一台或多台MySQL数据库(从库)从另一台MySQL数据库(主库)进行日志的复制再解析日志并应用到自身数据库,最终实现主库和从库可以保持一致。

复制过程

当"主库"的数据发生改变时,会记录到自己的二进制日志中,"从库"会存在一个io线程,读取"主库"中的二进制日志文件,获取到并写入"从库"二进制文件中,接着另一个SQL线程会执行从"主库"获取来的日志,进行执行相同的操作,使两库的数据始终保持一致。

 主从复制搭建步骤

 主库操作(主机233)

一、在数据库配置文件中启用二进制日志

在linux中输入命令,修改配置文件,将如下配置加进去后保存退出。 

vim /etc/my.cnf
# 开启二进制日志log-bin=mysql-bin# 设置二进制唯一IDserver-id=233

 二、重启MySQL服务

systemctl restart mysql

 三,添加权限用户,使得从库具有复制主库日志权限 

因为在此使用的MySQL8.0,所以需要先添加用户再赋予权限。 

# 创建用户xiaoming 密码12346CREATE USER 'xiaoming'@'%' IDENTIFIED BY '123456';# 给用户xiaoming赋予权限GRANT ALL PRIVILEGES ON *.* TO 'xiaoming'@'%'WITH GRANT OPTION; # 刷新权限flush privileges;# 展示master主库的状态show master status;

为了保持如上图的File和Position值不变并记下值, 不要再操作此库

  从库操作 (主机234)

一、修改另一台MySQL数据库的配置文件。

vim /etc/my.cnf
# 设置二进制唯一IDserver-id=233

 二、重启MySQL服务

systemctl restart mysql

 三、登录上mysql,利用主库信息连接主库

# 停止从库stop slave;# 输入主库的IP地址和用户名密码,以及刚才获取到的主库状态File和Position值change master to master_host='192.168.1.233',master_user='xiaoming',master_passWord='123456',master_log_file='mysql-bin.000001',master_log_pos=1324;# 开启从库start slave;# 展示从库状态show slave status\G; #\G格式化输出

 

 如上红框内均为Yes既为成功。

 主从复制测试 

我们会在windows平台上使用navicat分别连接linux上的两台数据库进行测试.

(测试记得关掉防火墙,否则navicat会连接不上)

关闭防火墙命令:systemctl stop firewalld

给主库添加一个数据库,观察从库是否会自动创建一个。 

 

 给数据库mydb创建student表并插入一些数据,用于读写分离测试。(给主库创建后,从库数据会与主库跟随自动同步)

CREATE TABLE student(name VARCHAR(255),age INT);INSERT INTO student VALUES('tom',18);

读写分离

 在设置好数据库的主从复制后,就可以来进行读写分离的编写了。

我们使用框架:Sharding-JDBC进行读写分离的操作。

我们使用SpringBoot项目仅需要导入它的坐标并书写数据库连接配置即可。

 用于SpringBooot测试项目结构预览 

 

这是一个最简单的SpringBoot项目结构,提供一个实体类Student与数据库中的student表一致,利用MyBatisPlus框架搭建数据层dao,业务层service以及表现层controller进行测试即可。

读写分离步骤(使用框架Sharding-JDBC)

一、导入Sharding-JDBC坐标

    org.apache.shardingsphere    sharding-jdbc-spring-boot-starter    4.1.1

二、在配置文件中编写读写分离规则(连接信息)

yml文件中配置,设置两台数据库的IP地址和使用的库

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.1.233:3306/mydb?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&useSSL=false&allowPublicKeyRetrieval=true        username: root        password: root      # 从数据源      slave:        type: com.alibaba.druid.pool.DruidDataSource        driver-class-name: com.mysql.cj.jdbc.Driver        url: jdbc:mysql://192.168.1.234:3306/mydb?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&useSSL=false&allowPublicKeyRetrieval=true        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  main:    allow-bean-definition-overriding: true

ps:引入后要是master和slave层级下爆红可以忽略,不影响运行。

=== 测试===

表现层提供两个接口,一个get接口新增数据模拟"写操作" (主库处理),另一个post接口获取数据模拟"读操作"(从库处理)。

 使用postman发送get请求访问接口,接口中是新增数据操作,属于写操作,则应该由主库master进行处理,我们请求后观察控制台。

  使用postman发送post请求访问接口,接口中是获取数据操作,属于读操作,则应该由从库slave进行处理,我们请求后观察控制台。

来源地址:https://blog.csdn.net/m0_60155232/article/details/129011170

您可能感兴趣的文档:

--结束END--

本文标题: SpringBoot环境-MySQL主从复制,读写分离的实现

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

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

猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作