项目实现读写分离操作(mysql)

这篇具有很好参考价值的文章主要介绍了项目实现读写分离操作(mysql)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

读写分离

1.问题说明

项目实现读写分离操作(mysql)

2.读写分离

项目实现读写分离操作(mysql)

Master(主库)----(数据同步)—> Slave(从库) Mysql主从复制

  • mysql主从复制

    1. 介绍

      • mysql主从复制是一个异步的复制过程,底层是基于mysql数据库自带的二进制日志功能。就是一台或多台mysql数据库(Slave,即从库)从另一台mysql数据库(Master,即主库)进行日志的复制然后再解析日志并应用到自身,最终现实从库的数据和主库的数据保持一致。mysql主从复制是mysql数据库自带功能,无需借助第三方工具
      • mysql复制过程分成三步:
        • Master将改变记录二进制日志(binary log)
        • Slave将Master的binary log拷贝到它的中继日志(relay log)
        • Slave重做中继日志中的事件,将改变应用到自己的数据库中
        • 项目实现读写分离操作(mysql)
    2. 配置

      • 配置–前置条件

        提前准备好两台服务器,分别安装mysql并启动服务成功

        • 主库Master 服务器ip
        • 从库Slave 服务器ip
      • 配置-主库Master

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

        [mysqld]

        log-bin=mysql-bin #[必须]启用二进制日志

        server-id = 100 #[必须]服务器–ID

        第二步:重启mysql服务

        systemctl restart mysqld

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

        GRANT REOLICATION SLAVE ON *.* to 'xiaoming'@'%' identified by 'Root@123456';
        
        • ==注:==上面sql的作用是创建一个用户xiaoming。密码Root@123456,并且给xiaoming用户授予REPLICATION SLAVE权限,常用于建立复制时所需要用到的用户权限,也就是Slave必须被Master授权具有该权限的用户,才能通过该用户复制。

        报错-----解决如下:

        mysql> GRANT REOLICATION SLAVE ON *.* to 'xiaoming'@'%' identified by 'Root@123456';
        ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'REOLICATION SLAVE ON *.* to 'xiaoming'@'%' identified by 'Root@123456'' at line 1
        
        mysql> create user xiaoming identified by 'Root@123456'
            -> ;
        Query OK, 0 rows affected (0.00 sec)
        
        mysql> grant replication slave on *.* to xiaoming
            -> ;
        Query OK, 0 rows affected (0.00 sec)
        

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

        show master status;
        

        项目实现读写分离操作(mysql)

        ==注意:==上面sql的作用是查看Master的状态,执行完此sql后不要再执行任何操作

      • 配置–从库Slave

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

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

        第二步:重启mysql服务

        systemctl restart mysqld
        

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

        change master to 
        master_host='(主库ip地址)',master_user='xiaoming',master_password='Root@123456',master_log_file='mysql-bin.000001',master_log_pos=603;
        
        start slave;
        

        ==注意:==如果报a running slave io thread的错!那么我们需要使用 stop slave;来停止这个异常

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

        show slave status;
        

      项目实现读写分离操作(mysql)

  • 读写分离案例

    • 背景

      背景

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

项目实现读写分离操作(mysql)

  • sharding-JDBC介绍

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

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

    • 适用于任何基于JDBC的ORM框架:JPA,Hibernate,MyBatis,Spring JDBC Template或直接使用JDBC。
    • 支持任何第三方的数据库连接池,如:DBCP,C3P0,BoneCP,Druid,HikariCP等。
    • 支持任意实现JDBC规范的数据库,目前支持MySQL,Oracle,SQLServer,PostgreSQL以及任何遵循SQL92标准的数据库
    <dependency>
                <groupId>org.apache.shardingsphere</groupId>
                <artifactId>sharding-jdbc-spring-boot-starter</artifactId>
                <version>4.0.0-RC1</version>
    </dependency>
    
  • 入门案例

    使用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:
              type: com.alibaba.druid.pool.DruidDataSource
              driver-class-name: com.mysql.cj.jdbc.Driver
              url: jdbc:mysql://(主库ip地址):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://127.0.0.1:3306/rw?characterEncoding=utf-8
              username: root
              password: 12345678
          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
      
    3. 在配置文件中配置允许bean定义覆盖配置项

      main:
          allow-bean-definition-overriding: true
      
  • 功能测试

    查询功能测试(操作Slave)

项目实现读写分离操作(mysql)

插入数据功能测试(操作Master)

项目实现读写分离操作(mysql)

  • 项目实现读写分离文章来源地址https://www.toymoban.com/news/detail-448474.html

    • 数据库环境准备(主从复制)
    • 代码改造
    • 功能测试

到了这里,关于项目实现读写分离操作(mysql)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • mysql进阶2——prosysql实现mysql读写分离

    基本了解: 实现数据库读写分离的中间件很多,比如Mycat、Cobar、Atlas、TDDL、Proxysql等等。 ProxySQL 可以灵活配置路由规则,不仅可以实现最简单的读写分离,还可以将读/写都分散到多个不同的组,以及实现分库 sharding (分表sharding的规则比较难写,但也能实现)。 这种模式的读

    2024年02月15日
    浏览(36)
  • Spring Boot项目优雅实现读写分离

    🎉欢迎来到架构设计专栏~Spring Boot项目优雅实现读写分离 ☆* o(≧▽≦)o *☆嗨~我是IT·陈寒🍹 ✨博客主页:IT·陈寒的博客 🎈该系列文章专栏:架构设计 📜其他专栏:Java学习路线 Java面试技巧 Java实战项目 AIGC人工智能 数据结构学习 🍹文章作者技术和水平有限,如果文中

    2024年02月05日
    浏览(51)
  • MariaDB MaxScale实现mysql8读写分离

    MaxScale 是干什么的? MaxScale是maridb开发的一个mysql数据中间件,其配置简单,能够实现读写分离,并且可以根据主从状态实现写库的自动切换,对多个从服务器能实现负载均衡。 MaxScale 实验环境 中间件 192.168.142.139 MaxScale 22.08.4 主服务器 192.168.142.146 mysql 8.0.30 从服务器 192.16

    2024年03月09日
    浏览(43)
  • 使用ProxySql实现Mysql的读写分离 详细安装步骤 亲测可行

    主机ip 说明 192.168.168.109 ProxySql 192.168.168.77 mysql master(主) 192.168.168.78 mysql slave(从)   在192.168.168.109机器上操作 在192.168.168.109机器上操作 报错 在192.168.168.109机器上操作 在192.168.168.109机器上操作 在192.168.168.109机器上操作 在192.168.168.109机器上操作 管理员登录 ProxySQL 前提也需

    2024年01月18日
    浏览(68)
  • 分库分表之基于Shardingjdbc+docker+mysql主从架构实现读写分离(二)

            说明:如果实现了docker部署mysql并完成主从复制的话再继续,本篇文章主要说明springboot配置实现Shardingjdbc进行读写分离操作。 如果没实现docker部署mysql实现主从架构的话点击我 application.yml配置设置连接池全局属性 shardingjdbc读写分离配置(qiyu-db-sharding.yaml) 同时这

    2024年02月15日
    浏览(41)
  • 分库分表之基于Shardingjdbc+docker+mysql主从架构实现读写分离 (三)

            本篇主要说明:                 1. 因为这个mysql版本是8.0,所以当其中一台mysql节点挂掉之后,主从同步,甚至双向数据同步都失效了,所以本篇主要记录下当其中的节点挂掉之后如何再次生效。 另外推荐大家使用mysql5.7的版本,这样当其他节点失效后就不

    2024年02月14日
    浏览(38)
  • python 实现对MySQL 主从复制与读写分离 --2023博客之星候选--城市赛道

    在Python中,可以使用 pymysql 库来实现对MySQL主从复制和读写分离的代码封装。以下是一个简单的示例: 在上述示例中,创建了一个名为 MySQLReplication 的类,该类用于封装主从数据库连接和执行查询的功能。在类的初始化方法中,传入主数据库和从数据库的配置信息,并创建连

    2024年02月11日
    浏览(43)
  • 基于k8s搭建mysql5.7主从集群实现读写分离

    一,准备工作 1,拥有一个运行中的k8s集群 2,拥有一个ceph分布式存储集群,此mysql集群基于ceph块存储,部署方案可参考我前面的rook部署ceph方案 二,集群搭建 1,创建存储类storageclass       将此 StorageClass 定义保存为 storageclass.yaml : 创建存储类   2,MySQL 部署包含一个 Con

    2024年02月08日
    浏览(39)
  • 第100讲:MHA+Atlas实现MySQL主从复制读写分离分布式集群

    Atlas是由 Qihoo 360, Web平台部基础架构团队开发维护的一个基于MySQL协议的数据中间层项目。它是在mysql-proxy 0.8.2版本的基础上,对其进行了优化,增加了一些新的功能特性。 Atlas是一个位于应用程序与MySQL之间中间件。在后端DB看来,Atlas相当于连接它的客户端,在前端应用看来

    2024年02月21日
    浏览(55)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包