当读和写所有压力都集中在一台数据库上承担时,压力大。并且若是数据库服务器磁盘损坏则会数据丢失,单点故障,因为所有数据都放在这一台服务器上。所以优化方向针对这两部分进行。




springboot InfluxDB设置超时时间_mysql


Mysql主从复制

介绍


springboot InfluxDB设置超时时间_Powered by 金山文档_02


配置

前置条件


springboot InfluxDB设置超时时间_数据源_03


准备好两台服务器,可以使用本机加上一台虚拟机,在虚拟机上需要安装mysql。可以使用下面命令查看MySQL服务是否打开

systemctl status mysqld

配置主库master

首先需要其用二进制文件,并且给服务器一个唯一的标识,因为主从复制会涉及到多台的服务器,每个服务器需要有自己的唯一标识。通过vim /etc/my.cnf进入修改配置文件。

vim /etc/my.cnf


springboot InfluxDB设置超时时间_服务器_04


第二步:重启Mysql服务

systemctl restart mysqld

第三步:登录Mysql数据库,创建用户并给用户赋予权限

因为主从复制时会涉及到,从库slave会向主库master请求日志,因此主库和从库之间是需要通信的,所以需要认证身份和权限。在从库时会使用到这个用户。mysql8需要先创建用户再赋予权限。

CREATE USER 用户名 IDENTIFIED WITH 'mysql_native_password' BY '密码';
GRANT REPLICATION SLAVE ON *.* TO 用户名;


springboot InfluxDB设置超时时间_Powered by 金山文档_05


第四步

在MySQL数据库下执行

show master status


springboot InfluxDB设置超时时间_Powered by 金山文档_06


配置从库slave

第一步:首先配置服务器的id

vim /etc/my.cnf


springboot InfluxDB设置超时时间_数据源_07


第二步:重启MySQL服务

systemctl restart mysqld

第三步:根据主库的实际的用户的值以及日志的位置进行修改


springboot InfluxDB设置超时时间_服务器_08


第四步:查看数据库的状态


springboot InfluxDB设置超时时间_数据源_09


可能遇到的问题:

  1. 若一直显示connecting可能是密码输入问题,也可能是未关闭防火墙,或者开启防火墙的3306端口
  2. 若是使用的是两台虚拟机,采用了虚拟机克隆技术的话,则需要修改slave从数据库的uuid(75条消息) 克隆的虚拟机导致mysql主从UUID一致怎么修改_数据库主从同步修改uuid_WuYle的博客-CSDN博客。但是采用本机与虚拟机的数据库则不需要。(75条消息) 关于MySQL5.7修改auto.cnf中UUID的值,启动报异常的问题_StromNing的博客-CSDN博客_auto.cnf(75条消息) 解决MySQL主从复制时主机和从机UUID相同问题_海并不深的博客-CSDN博客_csdn搜索:克隆的虚拟机导致mysql主从uuid一致怎么修改

读写分离案例

背景


springboot InfluxDB设置超时时间_数据源_10


springboot InfluxDB设置超时时间_spring boot_11


什么是ORM框架(75条消息) ORM框架简介_papima的博客-CSDN博客_orm框架

什么是JDBCJDBC详解 - ErBing - 博客园 (cnblogs.com)

入门案例


springboot InfluxDB设置超时时间_Powered by 金山文档_12


导入Maven坐标
<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,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#主库的ip及数据库rw
        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#从库的ip以及数据库rw
        username: root
        password: root
    masterslave:
      # 读写分离配置
      load-balance-algorithm-type: round_robin#负载均衡,这里设置的是从库的负载均衡,因为查询的从库可以    #有多个,这里的策略是轮询查询从库 
      # 最终的数据源名称 
      name: dataSource#bean的名字 
      # 主库数据源名称
      master-data-source-name: master
      # 从库数据源名称列表,多个逗号分隔
      slave-data-source-names: slave
    props:
      sql:
        show: true #开启SQL显示,默认false

其中names表示的是数据源的名字,下面的名字与其对应,其中从库的数据源可以有多个,按照上面的格式定义好就行,后续就交由框架进行处理,若是查询操作会自动的调用从库,若是增删改会自动的使用主库。

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

因为在shardingspherejdbc配置类中要创建数据源对象,但是在DruidDataSourceAutoConfigure中也想创建数据源对象dataSource。在配置文件中加入最后两行


springboot InfluxDB设置超时时间_spring boot_13