• 读写分离和主从复制


     这是只有一个数据库的情形,此时增删改查都是针对这个数据库而言

    存在两个问题:所有压力都是由一台数据库承担,数据库压力很大

    而且,一旦这个数据库发生故障,数据丢失,拿数据就全都没了

    现在有两个数据库(当然有条件的话,可以使用更多的数据库)

     这两个数据库,一个叫做主库,一个叫做从库

    查询去“从库”中查,(光查询是不会对数据库进行更改的)32

    增加,删除,修改统一称为写操作,写操作去“主库”中进行

    将数据库分成读库和写库,可以降低单个数据库的访问压力

    完成写操作后,把数据库中的数据要同步到从库中去,这就叫主从复制

    从库复制主库的日志,然后解析日志,就知道在主库中具体执行的是什么样的sql,再把这个sql在从库中执行一遍,这样就可以做到从库中的数据跟主库中保持一致

    这个过程更具体而言:

     主库先将自己的改变记录到二进制日志里面(binary log)

    然后有一个I/O线程负责读这个日志文件,然后将读到的内容拷贝到从库的中继日志(relay log)里面

    此时又有一个sql线程负责读取中继日志中发生的事件,然后将她应用到从数据库中

    主从复制实现:
    准备两台服务器((而且两台服务器里面都安装了mysql,而且都分别启动了mysql服务)

    比如主库所在的服务器的Ip地址是192.168.138.100

    从库所在的服务器的Ip地址是192.168.138.101

    导入shardingjdbc依赖包

    1. <dependency>
    2. <groupId>org.apache.shardingspheregroupId>
    3. <artifactId>sharding-jdbc-spring-boot-starterartifactId>
    4. <version>4.1.1version>
    5. dependency>

    在配置文件application.yml或者application.properties文件中配置读写分离规则

    1. spring:
    2. application:
    3. #应用的名称,可选
    4. name: reggie_take_out
    5. shardingsphere:
    6. datasource:
    7. names:
    8. master,slave1,slave2
    9. # 主数据源
    10. master:
    11. type: com.alibaba.druid.pool.DruidDataSource
    12. driver-class-name: com.mysql.cj.jdbc.Driver
    13. url: jdbc:mysql://192.168.138.100:3306/reggie?characterEncoding=utf-8
    14. username: root
    15. password: root
    16. # 从数据源
    17. slave1:
    18. type: com.alibaba.druid.pool.DruidDataSource
    19. driver-class-name: com.mysql.cj.jdbc.Driver
    20. url: jdbc:mysql://192.168.138.101:3306/reggie?characterEncoding=utf-8
    21. username: root
    22. password: root
    23. slave2:
    24. type: com.alibaba.druid.pool.DruidDataSource
    25. driver-class-name: com.mysql.cj.jdbc.Driver
    26. url: jdbc:mysql://192.168.138.102:3306/reggie?characterEncoding=utf-8
    27. username: root
    28. password: root
    29. masterslave:
    30. # 读写分离配置
    31. load-balance-algorithm-type: round_robin #从库负载均衡的策略:轮询,第一次查询走一号库,第二次查询走二号库,第三次查询走三号库......
    32. # 最终的数据源名称
    33. name: dataSource
    34. # 主库数据源名称
    35. master-data-source-name: master
    36. # 从库数据源名称列表,多个逗号分隔
    37. slave-data-source-names: slave1,slave2
    38. props:
    39. sql:
    40. show: true #开启SQL显示,默认false

  • 相关阅读:
    代码随想录 动态规划 part16
    Netty 集群(Java)
    MySQL时间类型注意事项
    (附源码)springboot企业合同管理系统 毕业设计 161456
    docker部署的nginx配置ssl证书https
    最真实的大数据SQL面试题(二)
    HTML基础知识点
    2023年浙大MEM考前80天上岸经验分享
    数据结构记录(一)
    npm run serve与npm run dev的区别
  • 原文地址:https://blog.csdn.net/weixin_47414034/article/details/128045705