笔记总结:Web后端——数据库读写分离技术

数据库读写分离技术

一、概述

1.背景
  • 所有读写操作都由一个数据库完成,使得数据库压力较大
  • 数据库服务器磁盘损坏导致数据丢失,单点故障
2.解决
  • Master(主库):主要完成写操作
  • Slave(从库):主要完成读操作,数据由主库同步,也充当主库的备份
3.技术
  • Mysql主从复制

二、Mysql主从复制

1.介绍

异步复制,从库从主库进行二进制日志复制,再解析应用到自身,是Mysql自带的功能。

2.过程
  • 主库修改,将修改信息存储在日志,发送修改事件给从库
  • 从库读取主库日志文件,拷贝到自己的中继日志
  • 从库重做中继日志事件,从而将改变应用于自身
3.配置
  • 准备两台服务器创建数据库

  • 配置主库:

    • 修改数据库配置文件my.cnf

      [mysqld]
      # 开启数据库二进制日志
      log-bin=mysql-bin
      # 服务器唯一id
      server-id=100
      
    • 重启服务

      systemctl restart mysqld
      
    • 创建用户,授予权限与主库通信

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

      xiaoming用户授权可以复制日志文件

    • 记录数据库中的日志文件名和位置

      show master status;
      
  • 配置从库

    • 修改数据库配置文件my.cnf

      [mysqld]
      # 服务器唯一id
      server-id=101
      
    • 重启服务

    • 与主库对接

      change master to 
      master_host='master.ip', master_user='xiaoming', master_password='Root@123456', master_log_file='mysql-bin.000001', master_log_pos=439;
      
      start slave;
      

三、Sharding-JDBC

1.介绍
  • 增强版JDBC框架
  • 适用于任何JDBC框架
  • 支持任何第三方数据库连接池
  • 支持任何实现JDBC规范的数据库
2.使用
  • 依赖
<dependency>
    <groupId>org.apache.shardingsphere</groupId>
    <artifactId>sharding-jdbc-spring-boot-starter</artifactId>
    <version>4.0.0-RC1</version>
</dependency>
  • 配置

    spring:
     shardingsphere:
      datasource:
       names:
       # 名字自定义
        master,slave1, slave2
       # 主数据源
       master:
        type: 数据库连接池类型
        driver-class-name: jdbc类全限定名
        url: 数据库地址
        username:
        password:
       # 从数据源
       slave1:
        # 类似
       slave2:
        # 类似
       # 读写分离配置
       masterslave:
        # 负载均衡算法
        load-balance-algorithm-type: round-robin # 轮询算法
        # 最终的数据源名称,数据源Bean对象
        name: dataSource
        # 主库数据源名称
        master-data-source-name: master
        # 从数据源名称列表,逗号分隔
        slave-data-source-name: slave1,slave2
       # 开启SQL日志显示,默认false
       props:
        sql:
         show: true
    
  • 允许Bean定义覆盖

    数据库连接池和Sharding-JDBC都会创建一个数据源的bean对象

    spring:
     main:
      allow-bean-definition-overriding: true
    

四、实现读写分离

  • 导入maven坐标
  • 在配置文件中配置读写分离规则
  • 配置文件中允许bean定义覆盖
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值