SpringBoot项目中实现MySQL读写分离

1、MySQL主从仿制

但咱们仔细观察咱们会发现,当咱们的项目都是用的单体数据库时,那么就或许会存在如下问题:

  • 读和写一切压力都由一台数据库承当,压力大
  • 数据库服务器磁盘损坏则数据丢掉,单点故障

为了处理上述说到的两个问题,咱们能够准备两 (多) 台MySQL,一台主(Master)服务器,一台从(Slave)服务器,主库mybatisplus数据改变(写、更新、删去这些操作) ,需求同步到从库中 (主从仿制) 。而用户在拜访咱们项目时,如果是写操java怎么读(inserJavat、update、delete),则直接操作主库;如果是读操作(select) ,则直接操作从库,这种结构便是读写别离啦。

SpringBoot项目中完结MySQL读写别离

在这种读写别离的结构中,从库是能够有多个的

1.1、介绍

MySQL主从仿制是一个异步的仿制进程,底层是根据Mysql数据库自带的二进制日志功用。便是一台或多台MySQL数据库(slave,即从库)从另一台MySQL数据库(master,即主库)进行日志的java培训仿制,然后再解析日志并应用到本身,最终完结从库的数据和主库的数据保持一致。MySQL主从仿制是 MySQL数据库自带功用,无需凭借第三方东西。

二进制日志:

二进制日志(BINLOG)记载了一切的 DDL(数据界说言语)句子和 DML(数据操作言语)句子,可是不包括数据查询句子。此日志对于灾祸时的数据康复起着极其重要的效果,MySQL的主从仿制, 便是经过该binlogmybatis分页插件实现原理完结的。默许MySQL是未敞开该测试手机是否被监控日志的。

MySQL仿制进程分红三步:

  1. MySQL master 将数据改变写入二进制日志(bin测试抑郁症的20道题ary log)
  2. slave将master的binary log拷贝到它的中继日志(relay log
  3. slave重做中继日志中的事件,将数据改变反映它自己的数据

SpringBoot项目中完结MySQL读写别离

1.2、主从库建立

在环境建立之前,咱们需求准备好两台服务器,如果日子富裕运用的是两台云服务器的时分记住要开放安全组,即防火墙;如果是比狗子我日子好点但也是用的虚拟机的话,记mysql数据库命令大全住别分这么多内存启动蓝屏了(别问怎么知道的)

这儿就不给咱们展示数据库的安装和防火墙的操作了,这个我感觉网上好多资源都能够满意遇到的问题,在建立主从库的时分有在网上见到过说MySQL版别要一致的,我也没太留心直接就在之前的MySQ测试工程师Ljava语言上操作了,mybatis面试题咱们能够自己去验java语言证一下。

1.2.1、主库装备

服务器:192.168.150.100(别试了黑不了的,这是虚拟机的ip)

1、修正Mysql数据库的装备文件vim /et测试你适合学心理学吗c/my.cnf

在打开的文件中参加下面两行,其间的server-id纷歧定是100,确保仅有即可
log-bin=mysql-bin   #[有必要]启用二进制日志
server-id=100       #[有必要]服务器仅有ID

SpringBoot项目中完结MySQL读写别离

2、重启Mysql服务

这儿有三个方法都能重启MySQL,最简略的无疑便是一关一开:

net stop mysql;net start mysql;
systemctl restart mysqld
service mysqld restart

3、创立数据同步的用户并授权

登录进去MySQL之后才能够履行下面的指令,因为这是SQL指令,Lmysql数据库基础知识inux不认识这玩意是啥。

GRANT REPLICATION SLAVE ON *.* to '用户名'@'开放的地址' identified by '暗码';
eg: GRANT REPLICATION SLAVE ON *.* to 'masterDb'@'%' identified by 'Master@123456';
记住刷一下权限
FLUSH PRIVILEGES;

4、查看master同步状况

这个时分还不必退出MySQL,因为下面的指java模拟器令仍是SQL指令,履行下面的SQL,能够拿到咱们后边需求的两个重要参数。

show master status;

SpringBoot项目中完结MySQL读写别离

履行完这一句SQL之后,==mybatisplus不要再操作主库!不要再操作主mybatis面试题库!不要再操作主库!==重要的事情说三遍,因为再操作主库之后或许会导致红框中的两个属性值会发生变化,后边如果发生了过错或许就和这儿有那么两毛钱关系了。

1.java环境变量配置2.2、从库装备

服务器:192.168.150.101(别试了黑不了mysql怎么读的,这也是虚拟机的ip)

1、 修正Mysql数据库的装java编译器备文mybatis中$和井号区别vim /mysql面试题etc/my.cnf

SpringBoot项目中完结MySQL读写别离

这儿要注意server-ijava培训d和主库以及其他从库都不能相同,否则后边将会装备不成功。

2、重启Mysql服务

这儿有三个方法都能重mysql怎么读启MySQL,最简略的无疑便是一关一开:

net stop mysql;net start mysql;
systemctl restart mysqld
service mysqld restart

3、设置主库地址及同步方位

登录进去MySQL之后才能够履行下面测试你的自卑程度的指令,因为这是SQL指mybatis怎么读

设置主库地址和同步方位
change master to master_host='192.168.150.100',master_user='masterDb',master_password='Master@123456',master_log_file='mysql-bin.000010',master_log_pos=68479;
记住记住敞开从库装备
start slave;

参数说明:

  • master_host: 主库的IP地址
  • master_user: 拜访主库进行主从仿制的用户名( 上java编译器面在主库创立的 )
  • master_password: 拜访主库进行主从仿制的用户名对应的暗码
  • master_log_file: 从哪个日志文件开始同步 ( 即1.2.1中第4步获取的File)
  • master_log_pos: 从指定日志文件的哪个方位开始同步 ( 即1.2.1中第4步获取的Position)

4、javaee查看从数据库的状况

这个时分还不必退出Mmysql安装配置教程ySQL,因为下面的指令仍是SQL指令,履行下面的SQL,能够看到从库的状况信息。经过状况信息中的Slave_IO_runningSlave_SQL_running能够看出主从同步是否安排妥当,如果这两个参数全为Yes,表示主从同步已经装备完结。

show slave statusG;

SpringBoot项目中完结MySQL读写别离

1.3、坑位介绍

1.3.1、UUID报错

这或许是因为linux 是仿制出来的,MySQL中还有一个server_uuid是相同的,咱们也需求修正。vim /var/lib/mysql/auto.cnf

SpringBoot项目中完结MySQL读写别离

1.3.2、server_id报错

这应该mybatis注解便是各位大牛设置server_id的时分不小心设置相同的id了,修正过来就java环境变量配置行,过程在上面的装备中。

1.mybatis分页插件实现原理3.3、同步反常处理

这是狗子在操作进程中搞出来的一个过错……

犯错的原因是在主库中删去了用户信息,可是在从库中同步的时分失利导致同步中止,下面记载自己的操作(是在进入MySQL的操作且是从库)。

MASTER_LOG_POS
STOP SLAVE;
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
START SLAVE;
SHOW SLAVE STATUSG;

在数据库中操作时,必定要注意当时所在的数据库是哪个,作为一个杰出的实践:在SQL句子前加USE dbname

操作不规范,mybatis注解亲人两行泪……

2、项目中完结

2.1、ShardingJDBC

Sharding-JDBC定位为轻量级Javamysql索引结构,在Javamysql面试题的JDBC层供给的额定服务。 它运用客户端直连数据库,以jar包方式mybatis框架供给服务,无需额定布置和依赖,可理解为增强版的JDBC驱动,完全MySQL兼容JDBC和各种ORM结构mysql密码忘记了怎么办

运用Sharding-JDBC能够在程序中轻松的完结数据库读写别离

Sharding-JDBC具有以下几个特点:

  • 适用于任何根据JDBC的ORM结构,如:JPA, Hibernate, Mybatis, Spring JDBC Template或直测试工程师接运用JDBC。
  • 支撑任何第三方的数据库连接池,如:DBCP, C3P0, BoneCP, Druid, HikariCP等。
  • 支撑任意完结JDBC规范的数据库。目前支撑MySQL,Oracle,SQLServer,PostgreSQL以及任何遵从SQL92标准的数据库。

下面咱们将用ShardingJDBC在项目java怎么读中完结MySQL的读写别离。

2.2、依赖导入

在pom.xml文件中导入ShardingJDBC的依赖坐标

<!--sharding-jdbc-->
<dependency>
    <groupId>org.apache.shardingsphere</groupId>
    <artifactId>sharding-jdbc-spring-boot-starter</artifactId>
    <version>4.0.0-RC1</version>
</dependency>

2.3、装备文件

在application.yml中增加数据源的装备

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.150.100:3306/db_test?useUnicode=true&characterEncoding=utf-8&useSSL=false
        username: root
        password: 123456
      # 从数据源
      slave:
        type: com.alibaba.druid.pool.DruidDataSource
        driver-class-name: com.mysql.cj.jdbc.Driver
        url: jdbc:mysql://192.168.150.101:3306/db_test?useUnicode=true&characterEncoding=utf-8&useSSL=false
        username: root
        password: 123456
    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
  # 掩盖注册bean,后边创立数据源会掩盖前面创立的数据源
  main:
    allow-bean-definition-overriding: true

2.4、测试跑路

这时咱MySQL们就能够对咱们项目中的装备进行一个测试,下面分别调用一个更新接口测试工程师和一个查询接口,经过查看日志中记载的数据源来判断是否能够依照咱们预料中的跑。

  • 更新操作mybatis中$和井号区别(写操作)

SpringBoot项目中完结MySQL读写别离

  • 查询操作(读操作)

SpringBoot项目中完结MySQL读写别离

搞定!!!程序正常依照咱们预期的成功跑起来了,成功凭借ShardingJDBC在咱们项目中完结了数据库的读写javaee别离。

SpringBoot项目中完结MySQL读写别离

发表评论

提供最优质的资源集合

立即查看 了解详情