读写分离(主从复制,Sharding-JDBC)

2023-10-30

目录

1.介绍

2.配置

2.1配置准备

2.2配置主库Master

2.3配置从库Slave

3.读写分离案例

3.1Sharding-JDBC

3.2入门案例


1.介绍

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

 MySQL复制过程分成三步:

*master将改变记录到二进制日志(binary log)

*slave将master的binary log 拷贝到它的中继日志(relay log)

*slave重做中继日志中的事件,将改变应用到中继的数据中

2.配置

2.1配置准备

准备好两台服务器,分别安装MySQL并启动服务

设置两台服务器的ip分别为:

*主库master 192.168.138.100

*从库slave 192.168.138.101

可以使用Linux命令:systemctl status mysqld

对服务器内的mysql进行启动

2.2配置主库Master

第一步:修改(增加两条配置)MySQL数据库的配置文件/etc/my.cnf

log-bin=mysql-bin 表示开启二进制日志

server-id=100 表示标志服务进程的唯一id

第二步:重启MySQL服务

systemctl restart mysqld

第三步:登录MySQL数据库,执行一下sql

登录MySQL数据库:mysql -u账号 -p密码

执行sql语句(创建用户且设置权限):

GRANT REPLICATION SLAVE ON *.*to'xiaoming'@'%'identified by 'Root@123456';

注:上面sql作用是创建一个用户xiaoming,密码是Root@123456,并且给xiaoming用户授予REPLICATION SLAVE权限。常用于建立复制时所需要用到的用户权限,也就是slave必须被master授权具有该权限的用户,才能通过该用户复制。

第四步:登录MySQL数据库,执行下面sql,记录下结果中File和Position的值

show master status;

 注:该sql的作用是查看Master日志的位置,执行完此sql后不要再执行其他操作,避免Master状态改变。

2.3配置从库Slave

第一步:修改MySQL数据库的配置文件/etc/my.cnf

server-id=101 #设置slave从库的唯一ID

第二步:重启MySQL服务

systemctl restart mysqld

第三步:登录MySQL数据库,执行下面sql

change master to

master_host='192.168.138.100',master_user='xiaoming',master_password='Root@123456',master_log_file='mysql-bin.000001',master_log_pos=439;

start slave;

注意:变更连接为master_host的小明用户作为中继,定位master的日志的位置。

 

第四步:登录MySQL数据库,执行下面sql,查看从库的状态

show slave status;

将返回值复制到文本编辑器中查看

3.读写分离案例

背景:面对日益增加的系统访问量,数据库的吞吐量面临着巨大的瓶颈。对于同一时刻有大量并发的读操作和较少写操作类型的应用系统来说,将数据库拆分为主库和从库,主库负责处理事务性的增删改操作,从库负责处理查询操作,能够有效的避免由数据库更新导致的行锁,是的整个系统的查询性能得到极大的改善。

3.1Sharding-JDBC

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

*适用于任何基于JDBC的ORM框架,如:JPA,Hibernate,Mybat is,SpringJDBC Template或直接使用JDBC。

*支持任何第三方的数据库连接池,如:DBCP,C3PO,BoneCP,D ruid,HikariCP等。

*支持任意实现JDBC规范的数据库。目前支持MySQL,Oracle,SQLServer,PostgreSQL以及任何遵循SQL92标准的数据库。

3.2入门案例

使用Sharding-JDBC实现读写分离步骤:

1.导入maven坐标

2.在配置文件中配置读写分离规则

3.在配置文件中配置允许bean定义覆盖配置项

spring:
  shardingsphere:
    datasource:
      names:
        master,slave
      # 主数据源
      master:
        type: com.alibaba.druid.pool.DruidDataSource
        driver-class-name: com.mysql.cj.jdbc.Driver
        url: jdbc:mysql://192.168.138.100:3306/rw?characterEncoding=utf-8
        username: root
        password: root
      # 从数据源
      slave:
        type: com.alibaba.druid.pool.DruidDataSource
        driver-class-name: com.mysql.cj.jdbc.Driver
        url: jdbc:mysql://192.168.138.101:3306/rw?characterEncoding=utf-8
        username: root
        password: root
    masterslave:
      # 读写分离配置
      load-balance-algorithm-type: round_robin #轮询
      # 最终的数据源名称
      name: dataSource
      # 主库数据源名称
      master-data-source-name: master
      # 从库数据源名称列表,多个逗号分隔
      slave-data-source-names: slave
    props:
      sql:
        show: true #开启SQL显示,默认false
  main:
    allow-bean-definition-overriding:true

思路:由Sharding-JDBC框架与SpringBoot框架进行协同操作,在配置文件中定义Sharding-JDBC的主库和从库的信息,设置负载均衡策略,并且由于Sharding-JDBC框架的SpringBootConfigration类中创建一个数据源给IOC管理,而在DruidDataSourceAutoConfigure类中也会创建一个数据源交给IOC管理,故产生冲突,需要在配置文件中声明allow-bean-definition-overriding:true。请求从客户端传到服务器的时候会有Sharding-JDBC框架去判定该读操作走从库,而增删改操作走主库,从而达到主从分离的效果,该过程并不需要编写java代码。 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

读写分离(主从复制,Sharding-JDBC) 的相关文章

随机推荐

  • 从 Windows 过度到 Mac 必备快捷键对照表

    Mac 键盘符号 图标 介绍 Command Shift Caps Lock Option Alt Control Enter Delete Fn Delete 上箭头 下箭头 左箭头 右箭头 Fn Page Up Fn Page Down
  • vue 从入门到入土---复习 webpack

    目录 前端工程化 wbepack的基本使用 webpack中的插件 webpack中的loader 打包发布 Socure Map 总结 前端工程化 1 了解前端工程化概念 前端工程化指的是 在企业级的前端项目开发中 把前端所需要的开发工具
  • 服务器运行mysql的时候出现:Error response from daemon: Container xxx is not running

    服务器运行mysql的时候出现 Error response from daemon Container xxx is not running 我是安装完mysql以后 通过这条命令进入mysql容器的时候出现报错 docker exec
  • Maven之自定义archetype生成项目骨架

    http blog csdn net sxdtzhaoxinguo article details 46895013 摘要 使用过Maven的人都知道maven中有许多功能都是通过插件来提供的 今天我们来说一下其中的一个插件 maven a
  • 安卓app开发零基础入门培训!腾讯Android开发面试记录,技术详细介绍

    开头 都说程序员是在吃青春饭 这一点的确有一点对的成分 以前我不这么认为 但随着年龄的增长 事实告诉我的确是这样的 过了30以后 就会发现身体各方面指标下降 体力和身心上都多少有点跟不上了 这个年龄往往是很尴尬的 与年轻的程序员相比 产出没
  • HBuilderX使用Vant组件库

    HBuilderX使用Vant组件库 原创地址 HBuilderX使用Vant组件库 HBuilderX是一款由国人开发的开发工具 其官网称其为轻如编辑器 强如IDE的合体版本 但是官方的社区中关于Vant组件的安装大多都是针对微信小程序开
  • win电脑go的安装

    官网打开 https go dev dl 默认安装到了c盘 然后配置一下环境变量就可以了 go run 1 go
  • nrm安装后报错

    原文链接 https juejin cn post 7212960463730819127 Error ERR REQUIRE ESM require of ES Module D npm node modules nrm node mod
  • DFS 相关例题

    会顶科技 两道 第一行为一个整数N 用来表示球的个数 第二行为一个整数M 用来表示桶的个数 从第三行到第N 2行 每行有M个整数 这些整数要么为0 要么为1 输出描述 输出为一个整数 输出1代表可以放入所有的球 输出0代表无法放入所有的球
  • android开发:Android Studio的Signature Versions选择

    参考 https blog csdn net jiangjingxuan article details 66970552
  • Anaconda安装jieba库和wordcloud库安装实现词云

    一 jieba库安装 1 从官网下载jieba压缩包 https pypi org project jieba files 2 将压缩包解压到anaconda的pkgs目录 3 打开anaconda prompt 切换目录至比如 C ana
  • Linux环境下编程遇到“fatal error:stdio.h:没有那个文件或目录”错误解决办法

    我是荔园微风 作为一名在IT界整整25年的老兵 今天总结一下linux环境下如何解决一个常见的问题 也就是 fatal error stdio h 没有那个文件或目录 错误 不少初学者在linux环境下用gcc编译C语言时 经常会遇到这个问
  • Linux wc命令

    Linux wc命令 作用 统计字节数 字符数 行数 最长的行的长度 单词数 格式 wc OPTION FILE wc OPTION files0 from F OPTION c 或 bytes 计算字节数 m 或 chars 计算字符数
  • SPA项目开发之首页导航+左侧栏菜单

    文章目录 后台主界面搭建 左侧树收缩功能 vue总线的概念 后台主界面搭建 在搭建主界面之前 来给大家介绍一个MOCK js 是一个模拟数据的生成器 用来帮助前端调试开发 进行前后端的原型分离以及用来提高自动化测试效率 众所周知Mock j
  • hex码和ascii码的转换

    hex码和ascii码的转换 2017年01月09日 17 48 25 changeyourmind 阅读数 4784 版权声明 本文为博主原创文章 未经博主允许不得转载 https blog csdn net changyourmind
  • PRT(Precomputed Radiance Transfer【2002】)原理实现

    声明 本文源自对Games202课程 作业2的总结 参考 手把手教你写GAMES202作业 GAMES202 作业2 Precomputed Radiance Transfer 球谐函数 GAMES 202 作业2 Games202课程 个
  • Apache Beam 模型

    背景 Apache Beam 是Google 开源的一个统一编程框架 它本身不是一个流式处理平台 而是提供了统一的编程模型 帮助用户创建自己的数据处理流水线 实现可以运行在任意执行引擎之上批处理和流式处理任务 它包含 一个可以涵盖批处理和流
  • C++工程实践经验

    1 C 工程实践经验谈 陈硕 giantchen gmail com 最后更新 2012 4 20 版权声明 本作品采用 Creative Commons 署名 非商业性使用 禁止演绎 3 0 Unported 许可 协议 cc by nc
  • DF标志和串移动指令(movsb/movsw)

    1 标志寄存器的第10位DF 方向标志位 在串处理指令中 控制每次操作后si di的增减 DF 0 每次操作后 si di增加 DF 1 每次操作后 si di减小 我们可以用汇编语法描述movsb的功能如下 mov es di byte
  • 读写分离(主从复制,Sharding-JDBC)

    目录 1 介绍 2 配置 2 1配置准备 2 2配置主库Master 2 3配置从库Slave 3 读写分离案例 3 1Sharding JDBC 3 2入门案例 1 介绍 MySQL主从复制是一个异步的复制过程 底层是基于MySQL数据库