SpringBoot项目中如何实现MySQL读写分离详解java

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

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

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

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

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

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

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

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

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

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

2、重启Mysql服务

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

GRANTREPLICATIONSLAVEON*.*to'用户名'@'开放的地址'identifiedby'密码';eg:GRANTREPLICATIONSLAVEON*.*to'masterDb'@'%'identifiedby'Master@123456';记得刷一下权限FLUSHPRIVILEGES;4、查看master同步状态

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

showmasterstatus;

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

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

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

netstopmysql;netstartmysql;systemctlrestartmysqldservicemysqldrestart3、设置主库地址及同步位置

设置主库地址和同步位置changemastertomaster_host='192.168.150.100',master_user='masterDb',master_password='Master@123456',master_log_file='mysql-bin.000010',master_log_pos=68479;记得记得开启从库配置startslave;参数说明:

4、查看从数据库的状态

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

showslavestatus\G;

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

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

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

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

MASTER_LOG_POSSTOPSLAVE;SETGLOBALSQL_SLAVE_SKIP_COUNTER=1;STARTSLAVE;SHOWSLAVESTATUS\G;在数据库中操作时,一定要注意当前所在的数据库是哪个,作为一个良好的实践:在SQL语句前加USEdbname。

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

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

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

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

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

org.apache.shardingspheresharding-jdbc-spring-boot-starter4.0.0-RC1

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

spring:shardingsphere:datasource:names:master,slave#主数据源master:type:com.alibaba.druid.pool.DruidDataSourcedriver-class-name:com.mysql.cj.jdbc.Driverurl:jdbc:mysql://192.168.150.100:3306/db_testuseUnicode=true&characterEncoding=utf-8&useSSL=falseusername:rootpassword:123456#从数据源slave:type:com.alibaba.druid.pool.DruidDataSourcedriver-class-name:com.mysql.cj.jdbc.Driverurl:jdbc:mysql://192.168.150.101:3306/db_testuseUnicode=true&characterEncoding=utf-8&useSSL=falseusername:rootpassword:123456masterslave:#读写分离配置,设置负载均衡的模式为轮询load-balance-algorithm-type:round_robin#最终的数据源名称name:dataSource#主库数据源名称master-data-source-name:master#从库数据源名称列表,多个逗号分隔slave-data-source-names:slaveprops:sql:show:true#开启SQL显示,默认false#覆盖注册bean,后面创建数据源会覆盖前面创建的数据源main:allow-bean-definition-overriding:true

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

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

THE END
1.刘和刚含泪一首《儿行千里》唱哭多少背井离乡的打工儿女民歌国语歌刘和刚含泪一首《儿行千里》唱哭多少背井离乡的打工儿女2024-09-25 11:30:35 DJ歌曲排行榜呀 广东 举报 0 分享至 0:00 / 0:00 速度 洗脑循环 Error: Hls is not supported. 视频加载失败 声明:个人原创,仅供参考 DJ歌曲排行榜呀 45粉丝 DJ歌曲排行榜呀 21:06 《青青河边草》《情难枕》《千年等https://www.163.com/v/video/VLC0ECU68.html
2.亲人两行泪是什么意思?亲人两行泪是什么梗?亲人两行泪,是电影流浪地球里的台词,其中有一段是北京第三区交通委提醒您: 道路千万条, 安全第一条。 行车不规范, 亲人两行泪。 此电影比较火。加上此条提醒在现实中很有教育意义,又比较通俗,所以迅速在网上火了。 亲人两行泪,由于电影内这句话有数次洗脑循环,且语音十分魔性,每一个看完电影的人,看到这https://henan.china.com/news/ms/2023/0426/2530428615.html
3.亲人两行泪的前两句是什么1、道路千万条,安全第一条,行车不规范,亲人两行泪! 2、这个梗出自刘慈欣小说改编电影《流浪地球》,电影中运载车插入身份识别卡后语音提示是:北京第三区交通委提醒你:道路千万条,安全第一条,行车不规范,亲人两行泪!每当卡车启动时,就会有这句提示语。电影中一共出现了四或五次,每次出现,都是不同的情绪爆发点https://edu.iask.sina.com.cn/jy/1XoTP1W2Yf.html
4.行车不规范亲人两行泪是什么梗行车不规范亲人两行泪出处相信不少的小伙伴都在现在的一些社交论坛上,抖音或者是B站微博等等地方经常性的看到“北京第三区交通委提醒您:道路千万条,安全第一条。行车不规范,亲人两行泪”这句话,很多小伙伴还不知道这个到底是什么梗代表什么意思,下面就来为大家详细的介绍一下。 https://weibo.com/ttarticle/p/show?id=2309351000784361299596335886
5.养哈不规范亲人两行泪高清在线观看PP视频首页 频道 搜索热搜榜 开通会员 客户端 看过 收藏 消息 您的Flash插件已过期或被禁止 升级或启用Flash 养哈不规范亲人两行泪 295 养哈不规范亲人两行泪 内容简介https://v.pptv.com/show/Ocxx4UmvH13APqY.html
6.亲人病故两行泪为保护险遭日本鬼子强暴的两名妇女同胞,在苏州盘门外吴门桥死于敌寇乱枪,葬于苏州灵岩山绣谷公墓,时年54岁。 一个留学美国高等学府,获得硕士学位的优秀女学生,就这样香消玉殒了。我们暂且不去评论杨荫榆在执掌大学期间的功过,只凭不畏日寇凶顽,挺身而出保护自己同胞的勇气就值得所有人的敬佩。她虽然英年早逝,但https://www.jianshu.com/p/c18942ebed53
7.为什么有人乱打方向盘却能回正?靠的是手感吗?但是哈哈哈哈,所以说到底其实还是要看人的,我觉得我的手感就很好,在这里也提醒广大好友开车注意安全啊哈哈哈。 行车不规范,亲人两行泪呀 路上开车且行且珍惜交通事故合辑1121_腾讯视频 汽车事故合集,开车一定要注意安全 行车安全:日本交通事故实拍锦集,生命只有一次,路上开车要小心https://www.yoojia.com/ask/17-12136802467249599682.html
8.智能合约审计系列———2权限隐患&条件竞争合约的开发者应当建立一套开发标准规范,同时尽可能的搜集网络上公开的现有的合约的漏洞的类型以及利用方法和安全补救方法,之后不断的完善自己的开发体系,而且在合约上线之前建议还是找专门的公司进行合约的安全审计,对合约做一次评估为好。 道路千万条,安全第一条。 编码不规范,亲人两行泪~https://xz.aliyun.com/t/4416
9.车险医保外用药是什么?医保外用药要不要买,买了能规避什么风险简单来说就是超出国家基本医疗保险的费用,医保外负责赔偿,真正的花小钱办大事。 保额一般10万足够用了,再高也是浪费钱了,基本医疗保险其实能覆盖很大一部分了。祝愿各位驾驶员永远不遇上事故,做遵守交通规则的公民。 “道路千万条,安全第一条,行车不规范,亲人两行泪”https://www.dongchedi.com/article/7126891618485273123
10.承诺高工资要求交押金,你在应聘卡车司机时被骗过吗?套路千万条,谨慎第一条。求职不规范,亲人两行泪。 总之,求职的路上坡坡坎坎多,我们需要智商在线、擦亮眼睛,不要因为暂时找不到工作或一时的利益冲昏头脑,上当受骗。 用人单位需注意 用人单位在招聘时相对求职而言,就主动的多了,不过也有需要注意的。 https://m.360che.com/law/190222/106546.html