您的位置:首页 > 房产 > 家装 > 国际新闻最新消息今天 新闻_word上下页纸张方向_整站优化系统厂家_合肥品牌seo

国际新闻最新消息今天 新闻_word上下页纸张方向_整站优化系统厂家_合肥品牌seo

2024/12/23 12:57:28 来源:https://blog.csdn.net/CSDN20221005/article/details/143286223  浏览:    关键词:国际新闻最新消息今天 新闻_word上下页纸张方向_整站优化系统厂家_合肥品牌seo
国际新闻最新消息今天 新闻_word上下页纸张方向_整站优化系统厂家_合肥品牌seo

MySql主从复制

介绍

当前项目中, 数据库的读和写都由一台数据库承担,压力大, 数据库服务器磁盘损坏则数据丢失,造成单点故障

MySQL主从复制是一个异步的复制过程,底层是基于Mysql数据库自带的二进制日志功能。

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

MySQL复制过程分成三步:

  1. master将改变记录到二进制日志(binary log)
  2. slave将master的binary log拷贝到它的中继日志(relaylog)
  3. slave重做中继日志中的事件,将改变应用到自己的数据库中

配置

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

  • 主库Master 192.168.138.100
  • 从库slave 192.168.138.101

配置主库Master

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

  1. 修改的内容:
  • [mysqld]
  • log-bin=mysql-bin #[必须]启用二进制日志
  • server-id=100 #[必须]服务器唯一ID
  1. 注意:
  • 服务器id可以随便写, 只要是唯一的就行
  • vim /etc/my.cnf

第二步: 重启Mysql服务, 因为修改了数据配置

  • systemctl restart mysqld

第三步: 登录Mysql数据库,执行下面SQL

GRANT REPLICATION SLAVE ON *.* to 'xiaoming'@'%' identified by 'Root@123456';

  • 上面SQL的作用是创建一个用户xiaoming,密码为Root@123456,并且给xiaoming用户授予REPLICATION SLAVE权限。
  • 该命令常用于建立复制时所需要用到的用户权限,也就是slave必须被master授权具有该权限的用户,才能通过该用户复制。
  • 登录数据库: mysql -uroot -proot

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

  • 命令: show master status;
  • 上面SOL的作用是查看Master的状态,执行完此SOL后不要再执行任何操作

配置从库Slave

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

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

第二步: 重启Mysql服务

  • systemctl restart mysqld

第三步: 登录Mysql数据库,执行下面SQL

  1. 命令1:

change master to

master_host='192.168.138.100',master_user='xiaoming',master_password='Root@123456',master_log_file='mysql-bin.000001',master_log_pos=439;

  1. 命令2:

start slave;

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

  • 命令: show slave status;

测试

连接两台数据库, 主库的增删改操作, 从库都会自动同步

Sharding-JDBC

背景

面对日益增加的系统访问量,数据库的吞吐量面临着巨大瓶颈。

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

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规范的数据库。目前支持MySOL,Oracle,SOLServer,PostgreSQL 以及任何遵循SQL92标准的数据库。

入门案例

环境准备: 新建数据库和user表, 打开rw_demo工程

  • user表id字段的类型要用bigint

导入maven坐标

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

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

server:port: 8080
spring:shardingsphere:datasource:names:master,slave# 主数据源master:type: com.alibaba.druid.pool.DruidDataSourcedriver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://192.168.138.100:3306/rw?characterEncoding=utf-8username: rootpassword: root# 从数据源slave:type: com.alibaba.druid.pool.DruidDataSourcedriver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://192.168.138.101:3306/rw?characterEncoding=utf-8username: rootpassword: rootmasterslave:# 读写分离配置load-balance-algorithm-type: round_robin# 最终的数据源名称name: dataSource# 主库数据源名称master-data-source-name: master# 从库数据源名称列表,多个逗号分隔slave-data-source-names: slaveprops:sql:show: true #开启SQL显示,默认falsemain:allow-bean-definition-overriding: true

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

server:port: 8080
spring:shardingsphere:... ...main:allow-bean-definition-overriding: true

功能测试

使用了Sharding-JDBC之后, 操作数据时, 读操作就会查询从数据库, 写操作就会操作主数据库,实现读写分离

项目改造

数据量库环境准备(主从复制)

直接使用我们前面在虚拟机中搭建的主从复制的数据库环境即可

在主库中创建瑞吉外卖项目的业务数据库reggie并导入相关表结构和数据

代码改造

新建分支

在项目中加入Sharding-JDBC实现读写分离步骤

1、导入maven坐标

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

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

server:port: 8080
spring:shardingsphere:datasource:names:master,slave# 主数据源master:type: com.alibaba.druid.pool.DruidDataSourcedriver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://192.168.138.100:3306/rw?characterEncoding=utf-8username: rootpassword: root# 从数据源slave:type: com.alibaba.druid.pool.DruidDataSourcedriver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://192.168.138.101:3306/rw?characterEncoding=utf-8username: rootpassword: rootmasterslave:# 读写分离配置load-balance-algorithm-type: round_robin# 最终的数据源名称name: dataSource# 主库数据源名称master-data-source-name: master# 从库数据源名称列表,多个逗号分隔slave-data-source-names: slaveprops:sql:show: true #开启SQL显示,默认falsemain:allow-bean-definition-overriding: true

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


server:port: 8080
spring:shardingsphere:... ...main:allow-bean-definition-overriding: true

功能测试

项目启动时会初始化两个数据源

查询操作会操作从数据库

更新操作会操作主数据库

提交代码后, 合并分支

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com