shardingsphere的学习(二):sharingjdbc操作读写分离

简介

mysql配置读写分离以及使用shardingjdbc配置操作读写分离

读写分离

主数据库负责增删改操作(写),从数据库负责查询操作(读),主数据库和从数据库之间会数据同步(主从复制)。
读写分离可以确保系统的稳定性(热备),提高性能。

shardingjdbc读写分离式根据sql语义的分析,将读操作和写操作分别路由到主库和从库。它提供透明化的读写分离,让开发人员像操作一个数据库一样去操作多个数据库。
shardingjdbc只是操作数据的路由,读写分离和主从复制是mysql做的。

mysql配置读写分离

复制mysql

在这里插入图片描述

修改mysql-8.0.25-winx64 -copy配置文件

在这里插入图片描述

  • 修改两处的端口号:port=3307
  • 修改mysql的基础路径:basedir=E:\mysql\mysql-8.0.25-winx64-copy 改成自己的mysql文件夹名
  • 修改数据目录:找到原来的mysql的路径下的文件,复制一份,然后修改:datadir=E:\mysql\data-copy
安装复制的mysql服务

在复制的mysql文件夹的bin目录中输入cmd(以管理员的身份),输入如下命令:

mysqld install mysqlcopy --defaults-file="E:\mysql\mysql-8.0.25-winx64-copy\my.ini"

在这里插入图片描述
安装成功
在任务管理器中右键启动
在这里插入图片描述
尝试连接
在这里插入图片描述

配置主从关系

配置这两个mysql服务的主从关系。
在这里插入图片描述
修改主mysql的my.ini文件,
头部添加配置:

[mysqld] 
#开启日志 
log‐bin = mysql‐bin 
#设置服务id,主从不能一致 
server‐id = 1 
#设置需要同步的数据库 
binlog‐do‐db=user_db 
#屏蔽系统库同步 
binlog‐ignore‐db=mysql 
binlog‐ignore‐db=information_schema 
binlog‐ignore‐db=performance_schema 

修改从mysql的my.ini文件,
头部添加配置:

[mysqld] 
#开启日志 
log‐bin = mysql-bin 
#设置服务id,主从不能一致 
server‐id = 2 
#设置需要同步的数据库 
replicate_wild_do_table=user_db.% 
#屏蔽系统库同步 
replicate_wild_ignore_table=mysql.% 
replicate_wild_ignore_table=information_schema.% 
replicate_wild_ignore_table=performance_schema.% 

重启服务,先启动主服务器,再启动从服务器。
在这里插入图片描述

创建一个专门用于主从复制的账号

连接主服务器,使用命令授权主备复制专用账号 :
CREATE USER 'db_sync'@'%' IDENTIFIED BY 'db_sync'; GRANT REPLICATION SLAVE ON *.* TO 'db_sync'@'%';
在这里插入图片描述
使用 FLUSH PRIVILEGES;刷新权限

使用show master status; 查看主数据库的状态
在这里插入图片描述

设置主从数据同步

切换到从服务器
在这里插入图片描述

先执行STOP SLAVE;停止同步
在这里插入图片描述
执行命令:

#修改从库指向到主库,使用上一步记录的文件名以及位点
CHANGE MASTER TO
master_host = 'localhost',
master_user = 'db_sync',
master_password = 'db_sync', 
master_log_file = 'mysql-bin.000001', 
master_log_pos = 1386;

注意:master_log_file和master_log_pos的值是使用show master status;命令展示的值
在这里插入图片描述
使用命令START SLAVE;启动同步
在这里插入图片描述
使用show slave status查看状态
在这里插入图片描述
要这两个字段都是yes才是配置成功,这个就是有问题了的。
使用命令show variables like 'log_%';查看错误日志;
在这里插入图片描述
打开日志,查看到
在这里插入图片描述
先打开任务管理器停止mysql服务
找出auto.cnf文件,修改里面的uuid,
在这里插入图片描述
83b167e3-8b2a-4b0c-9e26-7f1a4ef68391
然后启动mysql服务,先启动主再启动从
然后执行STOP SLAVE;,再执行START SLAVE;
在这里插入图片描述
可以了!!!!

测试

在主mysql的user_db数据库中修改t_user,从mysql会同步数据在这里插入图片描述

使用shardingjdbc操作读写分离

配置文件
# 配置数据源,给数据源起名称,
# 水平分库,配置两个数据源
spring.shardingsphere.datasource.names=m1,m2,m0,s0# 一个实体类对应两张表,覆盖
spring.main.allow-bean-definition-overriding=true#配置第一个数据源具体内容,包含连接池,驱动,地址,用户名和密码
spring.shardingsphere.datasource.m1.type=com.alibaba.druid.pool.DruidDataSource
spring.shardingsphere.datasource.m1.driver-class-name=com.mysql.cj.jdbc.Driver
spring.shardingsphere.datasource.m1.url=jdbc:mysql://localhost:3306/edu_db_1?serverTimezone=GMT%2B8
spring.shardingsphere.datasource.m1.username=root
spring.shardingsphere.datasource.m1.password=123456#配置第二个数据源具体内容,包含连接池,驱动,地址,用户名和密码
spring.shardingsphere.datasource.m2.type=com.alibaba.druid.pool.DruidDataSource
spring.shardingsphere.datasource.m2.driver-class-name=com.mysql.cj.jdbc.Driver
spring.shardingsphere.datasource.m2.url=jdbc:mysql://localhost:3306/edu_db_2?serverTimezone=GMT%2B8
spring.shardingsphere.datasource.m2.username=root
spring.shardingsphere.datasource.m2.password=123456#配置第三个数据源具体内容,包含连接池,驱动,地址,用户名和密码
# user_db主服务器
spring.shardingsphere.datasource.m0.type=com.alibaba.druid.pool.DruidDataSource
spring.shardingsphere.datasource.m0.driver-class-name=com.mysql.cj.jdbc.Driver
spring.shardingsphere.datasource.m0.url=jdbc:mysql://localhost:3306/user_db?serverTimezone=GMT%2B8
spring.shardingsphere.datasource.m0.username=root
spring.shardingsphere.datasource.m0.password=123456# user_db从服务器
spring.shardingsphere.datasource.s0.type=com.alibaba.druid.pool.DruidDataSource
spring.shardingsphere.datasource.s0.driver-class-name=com.mysql.cj.jdbc.Driver
spring.shardingsphere.datasource.s0.url=jdbc:mysql://localhost:3307/user_db?serverTimezone=GMT%2B8
spring.shardingsphere.datasource.s0.username=root
spring.shardingsphere.datasource.s0.password=123456# 主库从库逻辑数据源定义 ds0为user_db
spring.shardingsphere.sharding.master-slave-rules.ds0.master-data-source-name=m0
spring.shardingsphere.sharding.master-slave-rules.ds0.slave-data-source-names=s0# t_user分表策略,固定分配至ds0的t_user真实表
spring.shardingsphere.sharding.tables.t_user.actual-data-nodes=ds0.t_user# 配置公共表
spring.shardingsphere.sharding.broadcast-tables=t_udict
spring.shardingsphere.sharding.tables.t_udict.key-generator.column=dictid
spring.shardingsphere.sharding.tables.t_udict.key-generator.type=SNOWFLAKE# 指定course表里面主键cid 生成策略  SNOWFLAKE
spring.shardingsphere.sharding.tables.t_user.key-generator.column=user_id
spring.shardingsphere.sharding.tables.t_user.key-generator.type=SNOWFLAKE# 指定表分片策略  约定cid值偶数添加到course_1表,如果cid是奇数添加到course_2表
spring.shardingsphere.sharding.tables.t_user.table-strategy.inline.sharding-column=user_id
spring.shardingsphere.sharding.tables.t_user.table-strategy.inline.algorithm-expression=t_user#指定数据库分布情况,数据库里面表分布情况
# m1  m2    course_1 course_2
spring.shardingsphere.sharding.tables.course.actual-data-nodes=m$->{1..2}.course_$->{1..2}# 指定course表里面主键cid 生成策略  SNOWFLAKE
spring.shardingsphere.sharding.tables.course.key-generator.column=cid
spring.shardingsphere.sharding.tables.course.key-generator.type=SNOWFLAKE# 指定表分片策略  约定cid值偶数添加到course_1表,如果cid是奇数添加到course_2表
spring.shardingsphere.sharding.tables.course.table-strategy.inline.sharding-column=cid
spring.shardingsphere.sharding.tables.course.table-strategy.inline.algorithm-expression=course_$->{cid % 2 + 1}# 指定数据库分片策略 约定user_id是偶数添加m1,是奇数添加m2
spring.shardingsphere.sharding.tables.course.database-strategy.inline..sharding-column=user_id
spring.shardingsphere.sharding.tables.course.database-strategy.inline.algorithm-expression=m$->{user_id % 2 + 1}# 打开sql输出日志
spring.shardingsphere.props.sql.show=true

解析:s0就是从数据库,配置它的数据源,配置谁是主谁是从,最后配置一下t_user分表策略。

测试
@Test
public void add(){user u = new user();u.setUsername("joker");u.setUstatus("bad");userMapper.insert(u);
}
@Testpublic void find(){QueryWrapper<user> queryWrapper = new QueryWrapper<>();queryWrapper.eq("user_id",1024403036157509633l);user user1 = userMapper.selectOne(queryWrapper);System.out.println(user1);
}

会在主数据库中插入数据
在这里插入图片描述
打开从数据库,也会有一条数据
在这里插入图片描述
执行查询的操作,会去从数据库中查询
在这里插入图片描述

shardingproxy

透明化的数据库代理端,它相当于数据库,我们直接操作一个shardingproxy数据库,shardingjdbc底层会去操作分库分表的数据。
是一个独立应用,安装后进行分库分表,读写分离的配置,然后使用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/386548.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【前端】一文带你了解 CSS

文章目录 1. CSS 是什么2. CSS 引入方式2.1 内部样式2.2 外部样式2.3 内联样式 3. CSS 常见选择器3.1 基础选择器3.1.1 标签选择器3.1.2 类选择器3.1.3 id 选择器3.1.4 通配符选择器 3.2 复合选择器3.2.1 后代选择器 4. CSS 常用属性4.1 字体相关4.2 文本相关4.3 背景相关4.4 设…

敢不敢跟我一起搭建一个Agent!不写一行代码,10分钟搞出你的智能体!纯配置也能真正掌握AI最有潜力的技术?AI圈内人必备技能

说一千道一万&#xff0c;不如实地转一转。学了那么久的AI Agent的概念了&#xff0c;是时候该落地一个Agent看看自己的掌握程度了对不对&#xff0c;我们都理解大脑是自动节能的&#xff0c;但是知识的确需要倒逼自己一把才能真的掌握&#xff0c;不瞒大家说&#xff0c;笔者对…

论文阅读:面向自动驾驶场景的多目标点云检测算法

论文地址:面向自动驾驶场景的多目标点云检测算法 概要 点云在自动驾驶系统中的三维目标检测是关键技术之一。目前主流的基于体素的无锚框检测算法通常采用复杂的二阶段修正模块,虽然在算法性能上有所提升,但往往伴随着较大的延迟。单阶段无锚框点云检测算法简化了检测流程,…

日程管理多源归一,服务场景一键直达

时间对于每个人来说都是非常宝贵的&#xff0c;曾经我们使用台历、挂历来标记和查看重要日程&#xff0c;通过翻页来见证时光的流逝&#xff0c;随着信息化时代的不断发展&#xff0c;更加灵活简洁的电子日历成为主流&#xff0c;日历也从一个最简单的日期看板&#xff0c;慢慢…

正余弦算法作者又提出新算法!徒步优化算法(HOA)-2024年一区顶刊新算法-公式原理详解与性能测评 Matlab代码免费获取

声明&#xff1a;文章是从本人公众号中复制而来&#xff0c;因此&#xff0c;想最新最快了解各类智能优化算法及其改进的朋友&#xff0c;可关注我的公众号&#xff1a;强盛机器学习&#xff0c;不定期会有很多免费代码分享~ 目录 原理简介 算法伪代码 性能测评 参考文献 …

ruoyi vue3版本web端隐藏侧边栏及其顶部导航栏

做项目时有个需求是在web端里面嵌入一个页面全屏的大屏&#xff0c;但若依web自带的侧边栏导航和顶部导航一时还不知道怎么隐藏起来&#xff0c;于是在网上到处查找资料&#xff0c;终于&#xff0c;还是在若依的gitee文档中发现了线索 怎么隐藏侧边栏和顶部导航栏实现完全的全…

从数据时代到智能时代,星环科技信雅达联合发布金融全栈解决方案

近年来&#xff0c;星环科技与信雅达在金融行业的多个关键领域展开了广泛而深入的合作&#xff0c;推出了一系列面向金融科技领域的联合解决方案。此次合作基于星环科技在大数据、人工智能和云计算领域的先进技术&#xff0c;以及信雅达在金融领域的深厚积累&#xff0c;围绕数…

C语言程序设计(二)

四.找素数 素数&#xff1a;除了1和它本身不再有其他因数的自然数。换句话说&#xff1a;一个大于1的自然数 &#xff0c;如果只能被1和它本身整除&#xff0c;那就是素数&#xff08;质数&#xff09;。 在打印中遇到的问题就是&#xff0c;知道怎么写却总是运行不起来。主要…

Python missingno和Vaex库:高性能的大数据分析

在数据分析和处理过程中&#xff0c;数据缺失是常见的问题。处理和理解数据缺失情况是确保数据质量和分析准确性的关键步骤。Python的missingno库提供了一种便捷且直观的方式来可视化数据缺失情况&#xff0c;从而帮助我们更好地理解和处理缺失值。本文将详细介绍missingno库的…

一文看懂:数据产品的3种输出形式和4大服务层次

企业要想提升数据资产的价值&#xff0c;就必须了解数据产品。那么&#xff0c;什么是数据产品&#xff0c;我们该如何认识它&#xff1f; 在由WakeData惟客数据联合星光数智推出的直播栏目《星光对话》第5期中&#xff0c;星光数智首席数据架构师魏战松&#xff0c;分享了对于…

分布式事务解决方案(一) 2PC、3PC、TCC、Sega

目录 1.绪论 2.2PC 2.1 基本原理 2.1.1 组成 2.1.2 步骤 1.prepare阶段 2.commit阶段 2.2 2PC 存在的问题 2.2.1 阻塞问题 2.2.2 单点故障问题 1. 事务协调器宕机 2.部分数据不一致问题 2.资源管理器宕机 3. 事务协调器和资源管理管理器同时宕机 2.2 实现 2.2.1…

JCR一区级 | Matlab实现SO-Transformer-LSTM多变量回归预测(蛇群算法优化)

JCR一区级 | Matlab实现SO-Transformer-LSTM多变量回归预测&#xff08;蛇群算法优化&#xff09; 目录 JCR一区级 | Matlab实现SO-Transformer-LSTM多变量回归预测&#xff08;蛇群算法优化&#xff09;效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.【JCR一区级】M…

跨网段 IP 地址通信故障分析

现如今计算机网络的规模和复杂性不断增加&#xff0c;跨网段通信成为网络运行中的常见需求。但如果设备处于不同网段且路由设置出现偏差时就会导致通信故障&#xff0c;严重影响网络的正常运行和数据传输。 1.跨网段通信的基本原理 跨网段通信依赖于路由器的路由功能。路由器根…

影响卫星飞行的自然因素和人为因素

还是大剑师兰特&#xff1a;曾是美国某知名大学计算机专业研究生&#xff0c;现为航空航海领域高级前端工程师&#xff1b;CSDN知名博主&#xff0c;GIS领域优质创作者&#xff0c;深耕openlayers、leaflet、mapbox、cesium&#xff0c;canvas&#xff0c;webgl&#xff0c;ech…

[tomato]靶机复现漏洞详解!

靶机地址&#xff1a; https://download.vulnhub.com/tomato/Tomato.ova 靶机环境&#xff1a;Vmware 网络&#xff1a;NAT模式 信息收集&#xff1a; arp-scan -l 扫描靶机ip地址 扫描开放的端口信息 nmap -sS -sV -p- 192.168.77.135 发现开放端口21&#xff…

谷粒商城实战笔记-75-商品服务-API-品牌管理-品牌分类关联与级联更新

文章目录 一&#xff0c;引入Mybatis Plus分页插件二&#xff0c;品牌列表的模糊查询三&#xff0c;增加品牌测试数据四&#xff0c;开发后台品牌关联分类接口1&#xff0c;接口product/categorybrandrelation/catelog/list2&#xff0c;接口product/categorybrandrelation/sav…

LabVIEW汽车动态信号模拟系统

随着汽车工业的快速发展&#xff0c;对汽车电子控制单元&#xff08;ECU&#xff09;的测试与仿真需求日益增加。开发了一种基于LabVIEW软件开发的汽车动态信号模拟系统&#xff0c;该系统能有效模拟ECU在实车环境下的工作状态&#xff0c;为ECU的开发和测试提供了一个高效、经…

2024电赛H题参考方案(+视频演示+核心控制代码)——自动行使小车

目录 一、题目要求 二、参考资源获取 三、参考方案 1、环境搭建及工程移植 2、相关模块的移植 4、整体控制方案视频演示 5、视频演示部分核心代码 总结 一、题目要求 小编自认为&#xff1a;此次H题属于控制类题目&#xff0c;相较于往年较为简单&#xff0c;功能也算单一&…

C语言:字符串函数、内存函数剖析

字符串函数、内存函数剖析 一、字符串函数&#xff08;一&#xff09;求字符串长度1、strlen&#xff08;1&#xff09;库函数实现&#xff08;2&#xff09;自定义实现 &#xff08;二&#xff09;长度不受限制的字符串函数1、strcpy&#xff08;1&#xff09;库函数实现&…