三、Sharding-JDBC实现读写分离
一、Sharding-JDBC实现读写分离
1.1、读写分离概念
为了确保数据库产品的稳定性,很多数据库拥有双机热备功能。也就是,第一台数据库服务器,是对外提供增删改业务的生产服务器;第二台数据库服务器,主要进行读的操作。
让主数据库(
master
)处理事务性增、改、删操作,而从数据库(slave
)处理查询操作。
1.2、读写分离原理
**主从复制:**当主服务器有写入(insert
/ update
/ delete
)语句时候,从服务器自动获取。
读写分离:insert
/ update
/ delete
语句操作一台服务器,select
操作另一台服务器。
Sharding-JDBC通过SQL语句语义分析,实现读写分离过程,不会做数据同步。
二、MySQL配置读写分离
首先准备两台MySQL服务器,在Linux上安装MySQL,请参考:https://blog.csdn.net/qq_15092079/article/details/81629238
mysql数据库的主从同步,实现读写分离
准备的两台MySQL服务器如下:
master:192.168.64.110
slave:192.168.64.111
2.1、master主服务器的配置
2.1.1、配置文件my.cnf
说明:
server-id 服务器唯一标识。
log_bin 启动MySQL二进制日志,即数据同步语句,从数据库会一条一条的执行这些语句。
binlog_do_db 指定记录二进制日志的数据库,即需要复制的数据库名,如果复制多个数据库,重复设置这个选项即可。
binlog_ignore_db 指定不记录二进制日志的数据库,即不需要复制的数据库名,如果有多个数据库,重复设置这个选项即可。
其中需要注意的是,binlog_do_db和binlog_ignore_db为互斥选项,一般只需要一个即可。
server-id=1
log_bin=master-bin
log_bin_index=master-bin.index
binlog_do_db=db_user
2.1.2、创建从服务器的用户和权限
grant replication slave on *.* to sync_user@'192.168.64.%' identified by '123456';
注意:在MySQL8.0以上的时候,创建从服务器的用户和权限命令,就得分开操作,否则报错:
CREATE user 'sync_user'@'192.168.151.%' IDENTIFIED WITH mysql_native_password by '123456';
grant replication slave on *.* to 'sync_user'@'192.168.151.%';
flush privileges;
2.1.3、重启MySQL服务
2.1.4、查看主服务器状态
2.2、salve从服务器的配置
2.2.1、配置文件my.cnf的修改
备注:
#备注:
#server-id 服务器唯一标识,如果有多个从服务器,每个服务器的server-id不能重复,跟IP一样是唯一标识,如果你没设置server-id或者设置为0,则从服务器不会连接到主服务器。
#relay-log 启动MySQL二进制日志,可以用来做数据备份和崩溃恢复,或主服务器挂掉了,将此从服务器作为其他从服务器的主服务器。
#replicate-do-db 指定同步的数据库,如果复制多个数据库,重复设置这个选项即可。若在master端不指定binlog-do-db,则在slave端可用replication-do-db来过滤。
#replicate-ignore-db 不需要同步的数据库,如果有多个数据库,重复设置这个选项即可。
#其中需要注意的是,replicate-do-db和replicate-ignore-db为互斥选项,一般只需要一个即可。
server-id=2
relay-log=slave-relay-bin
relay-log-index=slave-relay-bin.index
# replicate-do-db=db_user
2.2.2、重启MySQL服务
2.2.3、连接master主服务器
change master to master_host='192.168.64.110',master_port=3306,master_user='sync_user',master_password='123456',master_log_file='master-bin.000001',master_log_pos=154;
2.2.4、启动slave数据同步
#启动slave数据同步
mysql> start slave;
#停止slave数据同步(若有需要)
mysql> stop slave;
2.2.5、查看slave信息
Slave_IO_Running和Slave_SQL_Running都为yes,则表示同步成功。
如果没有设置为YES,请参考如下链接,进行处理。
Slave_SQL_Running:No的两种解决办法
MySQL数据同步,出现Slave_SQL_Running:no和slave_io_running:no问题的解决方法
2.3、测试
2.3.1、在master主数据库,创建数据。
create database db_user;use db_user;CREATE TABLE t_user (user_id bigint(0) NOT NULL,user_name varchar(50) NULL DEFAULT NULL,ustatus varchar(2) NULL DEFAULT NULL,PRIMARY KEY (user_id)
);INSERT INTO t_user(user_id,user_name,ustatus) VALUES('1','zhangsan','1');
2.3.2、查看slave从数据库
发现从数据库中,也出现了db_user库、t_user表,且表中还有一条测试数据存在,证明同步数据成功。
三、Sharding-JDBC操作读写分离
3.1、代码
- User.java
package com.xbmu.entity;import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;@Data
@TableName("t_user") // 指定表
public class User {private Long userId;private String userName;private String ustatus;
}
- UserMapper.java
package com.xbmu.mapper;import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.xbmu.entity.User;
import org.springframework.stereotype.Repository;@Repository
public interface UserMapper extends BaseMapper<User> {}
- application.properties
# sharding-jdbc分片策略
# 配置数据源、给数据源起名称
spring.shardingsphere.datasource.names=m1,s1# 一个实体类对应两张表,覆盖
spring.main.allow-bean-definition-overriding=true# 配置数据源具体内容,包括连接池、驱动、地址、用户名和密码
# master主数据源
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://192.168.64.110:3306/db_user?serverTimezone=GMT%2B8
spring.shardingsphere.datasource.m1.username=root
spring.shardingsphere.datasource.m1.password=root# slave从数据源
spring.shardingsphere.datasource.s1.type=com.alibaba.druid.pool.DruidDataSource
spring.shardingsphere.datasource.s1.driver-class-name=com.mysql.cj.jdbc.Driver
spring.shardingsphere.datasource.s1.url=jdbc:mysql://192.168.64.111:3306/db_user?serverTimezone=GMT%2B8
spring.shardingsphere.datasource.s1.username=root
spring.shardingsphere.datasource.s1.password=root# 主库从库逻辑数据源定义 ds0 为 db_user
spring.shardingsphere.sharding.master-slave-rules.ds0.master-data-source-name=m1
spring.shardingsphere.sharding.master-slave-rules.ds0.slave-data-source-names=s1# t_user分表策略,固定分配至ds0的t_user真实表
spring.shardingsphere.sharding.tables.t_user.actual-data-nodes=ds0.t_user# 指定db_user库中t_user表里面主键user_id生成策略 SNOWFLAKE (雪花算法)
spring.shardingsphere.sharding.tables.t_user.key-generator.column=user_id
spring.shardingsphere.sharding.tables.t_user.key-generator.type=SNOWFLAKE# 打开sql输出日志
spring.shardingsphere.props.sql.show=true
- ShardingjdbcdemoApplicationTests.java
package com.xbmu;import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.xbmu.entity.User;
import com.xbmu.mapper.UserMapper;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;@SpringBootTest
class ShardingjdbcdemoApplicationTests {@Autowiredprivate UserMapper userMapper;@Testpublic void addUserDB(){User user = new User();user.setUserName("lucy");user.setUstatus("0");userMapper.insert(user);}@Testpublic void findUserDB(){QueryWrapper<User> wrapper = new QueryWrapper<>();wrapper.eq("user_id","");User user = userMapper.selectOne(wrapper);System.out.println(user);}}
3.2、测试
三、Sharding-JDBC实现读写分离相关推荐
- mysql sharding 读取_MySQL读写分离(一)——sharding-jdbc
sharding-sphere是强大的读写分离.分表分库中间件,sharding-jdbc是sharding-sphere的核心模块.官方网站 springboot项目中集成sharding-jdbc ...
- Sharding JDBC分片和读写分离详解
目录 Sharding Sphere简介 开始使用Sharding JDBC 数据分片 简单示例 Spring Boot示例 代码分析 属性分析 绑定表和广播表 真实表 绑定表 广播表 Shardin ...
- Mysql读写分离插件简化版
一.原理 1.基于互联网背景,服务响应需要越来越快,从而衍生出读写分离,即让主数据库(master)处理事务性增.改.删操作(INSERT.UPDATE.DELETE),而从数据库(slave)处理S ...
- sqlserver date类型和字符串比较_基于SQL Server数据库搭建主从复制实现读写分离实战演练...
一.课程介绍 读写分离(主从同步)从字面意思就可以理解,就是把对数据库的读操作和写操作分离开.读写分离在网站发展初期可以一定程度上缓解读写并发时产生锁的问题,将读写压力分担到多台服务器上.读写分离的基 ...
- mysql主从复制读写分离
一.环境 1.主服务器操作系统:Mac OS MySQL版本:5.1.6 2.从服务器操作系统:Centos 6.5 MySQL版本:5.1.6 二.实战 2.1MySQL主从复制,读写分离示意图 M ...
- SpringBoot + Sharding JDBC,一文搞定分库分表、读写分离
程序员的成长之路 互联网/程序员/技术/资料共享 关注 阅读本文大概需要 30 分钟. 来自:blog.csdn.net/qq_40378034/article/details/115264837 S ...
- SpringBoot + Sharding JDBC 读写分离、分库分表
Sharding-JDBC 最早是当当网内部使用的一款分库分表框架,到2017年的时候才开始对外开源,这几年在大量社区贡献者的不断迭代下,功能也逐渐完善,现已更名为 ShardingSphere,20 ...
- 【MySQL 读写分离】Sharding JDBC + Spring boot 实现数据库读写分离的登录 Demo
上篇文章我们搭建了 MySQL 数据库主从复制集群 MySQL 搭建主从复制集群~~~ 本篇文章我们利用搭建好的主从复制集群,使用 SpringBoot 结合 Sharding-JDBC 搭建一个小的 ...
- Sharding Sphere ~ Sharding-jdbc分库分表、读写分离
Sharding Sphere 是什么? 1.一套开源的分布式数据库中间件解决方案 2.有三个产品:Sharding-JDBC 和 Sharding-Proxy 3.定位为关系型数据库中间件,合理在分 ...
最新文章
- java 扫描tcp端口号_多线程TCP端口扫描 java实现
- 车载微信要来了?马化腾:正研发纯语音交互接口
- 为什么用lazy启动eclipse的时候,插件activator的start自动被调用
- 后缀数组--处理字符串的利器
- 数据中心巡检实操之UPS及电池
- php 解析配置文件,php 解析ini配置文件
- UOJ #277 BZOJ 4739 定向越野 (计算几何、最短路)
- WSUS专题之二:部署与规划1
- asp.net core 6 新特性,支持HTTP/3 端点发布
- mysql主从复制实践之单数据库多实例
- 你知道谷歌有个社区叫 GBG 么?
- java二进制八进制十六进制写法,java 二进制,八进制,十进制,十六进制间相互转换的步骤...
- iOS测试技巧:GPX文件修改经纬度
- 递归算法计算二叉树中叶子结点数目 c语言,编写递归算法,计算二叉树中叶子结点的数目。...
- mysql frm、MYD、MYI数据文件恢复,导入MySQL中
- 思科、华为、H3C交换机命名规则全收录
- 【情报百科】如何使用FOCA进行OSINT文档元数据分析?
- 华为诺亚方舟实验室简述
- 第12章 GUI编程与Tkinter相关组件介绍
- dos攻击的工具——pentmenu
热门文章
- C++打造暴风影音视频播放器项目,手把手教你打造个人播放器
- 单击事件 - 删除表单数据时提示是否确认删除
- iframe子页面position的fixed
- 图的最短路径--迪杰斯特拉算法 c语言
- 《财报就像一本故事书》刘顺仁(二) ——财务报表
- “智能、微型、多功能”将引领智能手表传感器新趋势
- 提升计算机审计水平,福建省柘荣县审计局“四举措”提升计算机审计水平
- ElementUI概述 [ElementUI]
- 顺丰科技面试-java开发
- Opencv与Matplotlib图片颜色展示不一致