MySQL主从复制-----读写分离

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

MySQL主从复制-----读写分离_第1张图片

配置-前提条件

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

主库Master: IP地址:假设192.168.138.100

从库slave: IP地址:假设192.168.138.101

配置主库

1.修改msql数据库的配置文件  /etc/my.cnf

        在配置文件中 [mysqld] 下面加上两段代码

MySQL主从复制-----读写分离_第2张图片

[mysqld]

log-bin=mysql-bin      #启用二进制日志

server-id=100            #服务器唯一ID

2.重启Mysql服务

 systemctl restart mysqld

3.登录Mysql数据库,执行SQL

//mysql8授权用户需要先创建,创建和授权同一条语句的话会报错
create user slave@'%' identified by '135564';
//再授权
GRANT ALL PRIVILEGES ON *.* TO 'slave'@'%'WITH GRANT OPTION;
//刷新
flush privileges;

注:上面SQL的作用是创建一个用户slave,密码为135564,并且给slave用户授予REPLICATION SLAVE权限。常用于建立复制时所需要用到的用户权限,也就是slave必须被master授权具有该权限的用户,才能通过该用户复制。

4.登录Mysql数据库,执行下面SQL,记录下结果中File和Position的值

show master status;

MySQL主从复制-----读写分离_第3张图片

配置从库

1.修改msql数据库的配置文件  /etc/my.cnf

[mysqld]

server-id=101           #服务器唯一ID

2.重启Mysql服务

 systemctl restart mysqld

3.登录Mysql数据库,执行SQL

//执行前先停下slave
stop slave;

//这是从库和主库连接的关键一步,host是主库的ip,user是前面创建的slave用户,file和pos是主库show master status的信息
change master to
master_host='192.168.1381.100',master_user='slave',master_password='135564',
master_log_file='mysql-bin.000005',master_log_pos=441;

//执行后启动slave
start slave;

4.登录Mysql数据库,执行下面SQL,查看从数据库的状态(我这边登录统一用root)

show slave status;输出会很乱
show slave status\G;这样就竖着输出,不会乱

MySQL主从复制-----读写分离_第4张图片
两个yes则表示成功配置主从复制,Connection和No都是配置有问题

后面自己可以测试两个数据库,主库增删改,可以发现从库也被同步了。

读写分离:

        数据库主库负责处理事务性的增删改操作,从库负责处理查询操作。

Shardjing-JDBC

         Sharding-JDBC通过sql语句语义分析,当sql语句有insert、update、delete时,Sharding-JDBC就把这次操作在主数据库上执行;当sql语句有select时,就会把这次操作在从数据库上执行,从而实现读写分离过程。但Sharding-JDBC并不会做数据同步,数据同步是配置MySQL后由MySQL自己完成的。 

Springboot案例

1.导入依赖sharding-jdbc-spring-boot-starter

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

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

spring:
  shardingsphere:
    # 数据源配置
    datasource:
      # 数据源名称,多数据源以逗号分隔,名称可以随意起名
      names: master,slave
      #配置主数据源
      master: 
        driver-class-name: com.mysql.cj.jdbc.Driver
        type: com.alibaba.druid.pool.DruidDataSource
        password: xxxxxx
        username: xxxxxx
        url: jdbc:mysql://192.168.138.100:3306/xxxxx
      #配置从数据源
      slave: 
        driver-class-name: com.mysql.cj.jdbc.Driver
        type: com.alibaba.druid.pool.DruidDataSource
        password: xxxxxx
        username: xxxxxx
        url: jdbc:mysql://192.168.138.101:3306/xxxxx

    props:
        sql:
          show: true #开启SQL显示,默认false
  main:
     allow-bean-definition-overriding: true 

 后面可以使用springboot controller,service,mapper对数据库操作测试

你可能感兴趣的:(mysql,数据库,java)