首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >MYSQLg高级------Sharding-JDBC 实现读写分离

MYSQLg高级------Sharding-JDBC 实现读写分离

作者头像
默 语
发布2024-11-20 10:02:27
发布2024-11-20 10:02:27
23700
代码可运行
举报
文章被收录于专栏:JAVAJAVA
运行总次数:0
代码可运行
实现读写分离

博主 默语带您 Go to New World.个人主页—— 默语 的博客👦🏻 《java 面试题大全》 🍩惟余辈才疏学浅,临摹之作或有不妥之处,还请读者海涵指正。☕🍭 《MYSQL从入门到精通》数据库是开发者必会基础之一~ 🪁 吾期望此文有资助于尔,即使粗浅难及深广,亦备添少许微薄之助。苟未尽善尽美,敬请批评指正,以资改进。!💻⌨

Sharding-JDBC 实现读写分离

1 、读写分离概念

读写分离原理:

上面的读写分离其实就是:2太数据库主从机制,一个提供读(select )另一个提供 增删改 为了保证数据的一致性他们直接是数据同步的;

下面说下数据咋同步的

那个图好理解看那个; 主服务器有一个binlog日志开启的功能他会记录所有增删改的操作,当主服务器进行相关的操作的时候 日志必定会记录他的操作;然后这个时候我们的从服务器他就会 实时的监控这个日志(biglog)的一些变化;来实现我们数据同步;

Sharding-JDBC通过sql语句语义分析,实现读写分离过程,并不会做数据同步,数据同步由MySQL实现

2 、 MySQL 配置读写分离

(我本地是没有尝试成功的) 第一步 创建两个 MySQL 数据库服务,并且启动两个 MySQL 服务 ( 1 )复制之前MySQL目录

( 2 )修改复制之后配置文件 ⚫ 修改端口号,文件路径 ⚫ 需要把数据文件目录再复制一份

( 3 )把复制修改之后从数据库在windows安装服务

使用命令:(我就是这步失败的怎么也成功不了) 在bin下执行

代码语言:javascript
代码运行次数:0
运行
复制
mysqld install mysqls1 --defaults-file="D:\Program Files\MySQL\MySQL
Server-s1\my.ini"

第二步 配置 MySQL 主从服务器 ( 1 )在主服务器配置文件

代码语言:javascript
代码运行次数:0
运行
复制
[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

( 2 )在从服务器配置文件

代码语言:javascript
代码运行次数:0
运行
复制
[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.%

( 3 )把主和从服务器重启

第三步 创建用于主从复制的账号 #切换至主库bin目录,登录主库

代码语言:javascript
代码运行次数:0
运行
复制
mysql ‐h localhost ‐uroot ‐p

#授权主备复制专用账号

代码语言:javascript
代码运行次数:0
运行
复制
GRANT REPLICATION SLAVE ON . TO 'db_sync'@'%' IDENTIFIED BY 'db_sync';

#刷新权限

代码语言:javascript
代码运行次数:0
运行
复制
FLUSH PRIVILEGES;

#确认位点 记录下文件名以及位点

代码语言:javascript
代码运行次数:0
运行
复制
show master status;

第四步 主从数据同步设置 #切换至从库bin目录,登录从库

代码语言:javascript
代码运行次数:0
运行
复制
mysql ‐h localhost ‐P3307 ‐uroot ‐p

#先停止同步

代码语言:javascript
代码运行次数:0
运行
复制
STOP SLAVE;

#修改从库指向到主库,使用上一步记录的文件名以及位点

代码语言:javascript
代码运行次数:0
运行
复制
CHANGE MASTER TO
master_host = 'localhost',
master_user = 'db_sync',
master_password = 'db_sync',
master_log_file = 'mysql-bin.000177',
master_log_pos = 107 ;

#启动同步

代码语言:javascript
代码运行次数:0
运行
复制
START SLAVE;

#查看Slave_IO_Runing和Slave_SQL_Runing字段值都为Yes,表示同步配置成功。如果不为Yes,请排查相关异常。

代码语言:javascript
代码运行次数:0
运行
复制
show slave status
3 、 Sharding-JDBC 操作

( 1 )配置读写分离策略

你们能安装成功也可以直接在数据库新增删除个数据查看是否成功;

#user_db从服务器

代码语言:javascript
代码运行次数:0
运行
复制
spring.shardingsphere.datasource.s0.type=com.alibaba.druid.pool.DruidDataSourc
e
spring.shardingsphere.datasource.s0.driver-class-name=com.mysql.cj.jdbc.Driver
spring.shardingsphere.datasource.s0.url=jdbc:mysql://localhost:3307/user_db?se
rverTimezone=GMT%2B
spring.shardingsphere.datasource.s0.username=root

spring.shardingsphere.datasource.s0.password=root


主库从库逻辑数据源定义 ds0为user_db
spring.shardingsphere.sharding.master-slave-rules.ds0.master-data-source-
name=m
spring.shardingsphere.sharding.master-slave-rules.ds0.slave-data-source-
names=s

配置user_db数据库里面t_user 专库专表
#spring.shardingsphere.sharding.tables.t_user.actual-data-nodes=m$->{0}.t_user

t_user分表策略,固定分配至ds0的t_user真实表
spring.shardingsphere.sharding.tables.t_user.actual-data-nodes=ds0.t_user

( 2 )编写测试代码

代码语言:javascript
代码运行次数:0
运行
复制
//添加操作
@Test
public void addUserDb() {
User user = new User();
user.setUsername("lucymary");
user.setUstatus("a");
userMapper.insert(user);
}

//查询操作
@Test
public void findUserDb() {
QueryWrapper wrapper = new QueryWrapper<>();
//设置userid值
wrapper.eq("user_id",465508031619137537L);
User user = userMapper.selectOne(wrapper);
System.out.println(user);
}

视频地址

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-08-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 实现读写分离
  • Sharding-JDBC 实现读写分离
    • 1 、读写分离概念
    • 2 、 MySQL 配置读写分离
    • 3 、 Sharding-JDBC 操作
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档