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

67 阅读3分钟

实现读写分离

博主 默语带您 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下执行

mysqld install mysqls1 --defaults-file="D:\Program Files\MySQL\MySQL
Server-s1\my.ini"

在这里插入图片描述

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

[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 )在从服务器配置文件

[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目录,登录主库

mysql ‐h localhost ‐uroot ‐p

#授权主备复制专用账号

GRANT REPLICATION SLAVE ON . TO 'db_sync'@'%' IDENTIFIED BY 'db_sync';

#刷新权限

FLUSH PRIVILEGES;

在这里插入图片描述
#确认位点 记录下文件名以及位点

show master status;

在这里插入图片描述

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

mysql ‐h localhost ‐P3307 ‐uroot ‐p

#先停止同步

STOP SLAVE;

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

CHANGE MASTER TO
master_host = 'localhost',
master_user = 'db_sync',
master_password = 'db_sync',
master_log_file = 'mysql-bin.000177',
master_log_pos = 107 ;

在这里插入图片描述

#启动同步

START SLAVE;

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

show slave status

在这里插入图片描述

3 、 Sharding-JDBC 操作

( 1 )配置读写分离策略

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

#user_db从服务器

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 )编写测试代码

//添加操作
@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);
}

视频地址

如对本文内容有任何疑问、建议或意见,请联系作者,作者将尽力回复并改进📓;(联系微信:Solitudemind )