目录 概述 环境 主从复制 读写分离 概述 记录在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://lsjlt.com/news/397621.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
2024-10-23
2024-10-22
2024-10-22
2024-10-22
2024-10-22
2024-10-22
2024-10-22
2024-10-22
2024-10-22
2024-10-22
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0