瑞吉外卖笔记——第08讲读写分离

导读:本篇文章讲解 瑞吉外卖笔记——第08讲读写分离,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

        让项目读写分离,写走主库,读走从库,从单一的一台数据库到多台数据库,访问压力降低。将主库的数据同步到从库来这种结构叫Mysql主从复制。

一、Mysql主从复制

1.介绍

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

MySQL复制过程分成三步:
master将改变记录到二进制日志(binary log)
● slave将master的binary log拷贝到它的中继日志(relay log)
● slave重做中继日志中的事件,将改变应用到自己的数据库中

瑞吉外卖笔记——第08讲读写分离

2.配置

2.1 前提条件

        提前准备好两台服务器,分别安装MySQL并启动服务成功。我这里主库远程连接主库名字为localhost,另一个为从库。两台服务器可以通过克隆虚拟机实现,注意在克隆之前先快照,以防错误发生可以返回到原本状态。克隆安装mysql的虚拟机要改mysql的uuid,8.0版重新配置用户加密方式。

主库Master:192.168.72.131

从库Slave:192.168.72.132

瑞吉外卖笔记——第08讲读写分离

2.2 配置——主库Master

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

        启动MySQL( systemctl status mysqld )后输入口令( vim /etc/my.cnf )进入编辑,加入两行代码:

log-bin=mysql-bin    #[必须]启用二进制日志
server-id=100          #[必须]服务器唯一id

瑞吉外卖笔记——第08讲读写分离

瑞吉外卖笔记——第08讲读写分离

第二步:重启MySql服务

systemctl restart mysqld

瑞吉外卖笔记——第08讲读写分离

没有报错说明重启成功

第三步:登录 MySql数据库,执行以下SQL

mysql -uroot -proot

grant replication slave on *.* to ‘xiaoming’@’%’ identified by ‘Root@123456’;

        注:上面SQL的作用是创建一个用户xiaoming,密码为Root@123456,并且给用户授予replication slave权限。常用于建立复制时所需要用到的用户权限,也就是slave必须被master授权具有该权限的用户,才能通过该用户复制。这里如果是mysql8版本的不要加 identified by ‘password’,会导致语法错误。我这里直接设置123456报错提示不安全建议设置复杂一些。

瑞吉外卖笔记——第08讲读写分离

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

show master status;

瑞吉外卖笔记——第08讲读写分离

2.3 配置——从库Slave

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

server-id=101          #[必须]服务器唯一id

瑞吉外卖笔记——第08讲读写分离

第二步:重启MySql服务

systemctl restart mysqld

第三步:登录 MySql数据库,执行以下SQL

记得先登录: mysql -uroot -proot

change master to master_host=’192.168.72.131′,master_user=’xiaoming’,master_password=’Root@123456′,master_log_file=’mysql-bin.000001′,master_log_pos=441;

start slave;

瑞吉外卖笔记——第08讲读写分离

        上面代码块中出现的master_log_file=’mysql-bin.000001′,master_log_pos=441;要和主库查出来的一一对应。

瑞吉外卖笔记——第08讲读写分离

        这里是第一次主从读写,如果之前有过slave可能会报错,使用 stop slave 停止后再次执行SQL口令即可成功。

使用 start slave; 口令让线程跑起来

瑞吉外卖笔记——第08讲读写分离

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

show slave status;

瑞吉外卖笔记——第08讲读写分离

         我们会发现内容很乱,可以将返回的全部内容复制到文本编辑器查看。或者show slave status\G;这个可以查看很清楚。

瑞吉外卖笔记——第08讲读写分离

瑞吉外卖笔记——第08讲读写分离

3.测试

第一步:主库和从库都连接上Navicat,主机写两台虚拟机IP地址,我的用户名密码都为root

瑞吉外卖笔记——第08讲读写分离

第二步:主库新建一个waimai数据库,从库进行刷新

瑞吉外卖笔记——第08讲读写分离

瑞吉外卖笔记——第08讲读写分离

二、读写分离案例

2.1 背景

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

瑞吉外卖笔记——第08讲读写分离

2.2 Sharding-JDBC介绍

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

        使用Sharding-JDBC可以在程序中轻松的实现数据库读写分离。

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

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

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

2.3 入门案例

第一步:数据库主库新建一张user表,字段为id,name,age,address

瑞吉外卖笔记——第08讲读写分离

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

1. 导入maven坐标

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

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

spring:
  shardingsphere:
    datasource: #指定数据源
      names:
        master,slave  #这里的master,slave可以改变,和下面的对应即可
      # 主数据源
      master:
        type: com.alibaba.druid.pool.DruidDataSource
        driver-class-name: com.mysql.cj.jdbc.Driver
        url: jdbc:mysql://192.168.72.131: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.72.132: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

瑞吉外卖笔记——第08讲读写分离

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

  main:
    allow-bean-definition-overriding: true

4. 启动

瑞吉外卖笔记——第08讲读写分离


VM克隆虚拟主机造成MySQL的UUID重复问题

第一步:进入到auto.cnf文件的上一级目录

cd /var/lib/mysql

ls

瑞吉外卖笔记——第08讲读写分离

第二步:移除UUID

mv auto.cnf auto.cnf.bak

瑞吉外卖笔记——第08讲读写分离

第三步:生成UUID

/usr/local/mysql/bin/mysqld_safe –defaults-file=/etc/my3306.cnf –user=mysql & 

瑞吉外卖笔记——第08讲读写分离

第四步:重启服务

瑞吉外卖笔记——第08讲读写分离

最后回到从库界面再次进行查看 

瑞吉外卖笔记——第08讲读写分离


完整代码下载地址:稍后补充 

MySQL主从复制项目实例-Java文档类资源-CSDN下载

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/111732.html

(0)
Java光头强的头像Java光头强

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!