MySQL的读写分离的配置

MySQL读写分离就是创建不同的几个数据库来实现读的时候是一个数据库,写的时候是另一个数据库,提升系统的允许效率,读写分离运用了MySQL的主从复制

主从复制的含义:就是将主库的数据同步到从库的数据,从而保证从库的数据和主库的数据保持一致。

主从复制的原理:MySQL主从复制是一个异步的复制过程,底层是基于MySQL数据库自带的二进制日志功能,就是一台或者多台的数据库(从库)从另一台数据库(主库)进行日志的复制再解析日志并应用到自身,最终实现从库和主库的数据保持一致。

一 、 读写分离的配置步骤:(此处使用的是Linux虚拟机)

第一步:创建两台Linux虚拟机,并安装上MySQL数据库(自行安装)

第二步:在Linux中配置其中一个MySQL为主库

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

        2、在当前的配置文件中加入以下配置

        [mysqld]

        log-bin=mysql-bin             含义: 启用二进制日志

        server-id=100                   含义:  服务器唯一id

        3、重启服务

systemctl restart mysqld 

        4、创建用户,用于从库和主库之间的通信

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

以上创建是创建一个用户xiaoming ,密码是Root@123456  ,并且给xiaoming用户授权REPLICATION SLAVE 权限。 常用户建立复制时所需要用到的用户权限,也就是slave必须被master授权具有该权限的用户,才能通过该用户复制

        5、登录MySQL数据库,执行下面的SQL,记录下结果中File 和Position的值

show master status 

【注意】:执行完这步以后就不要再执行任何操作。当前虚拟机就停留在当前步骤

第三步:在Linux中配置从库(此时在另一个虚拟机中,不是相同的虚拟机)

        1、修改配置文件 /etc/my.cnf

[mysqld]

server-id=101                        含义:服务器id必须唯一

        2、重启MySQL的服务

 systemctl restart mysqld 

        3、执行下面的SQL,其中那个master_host 是我们自己主库的ip,那个master_log_file 、master_log_pos也是我们自己的(主库的)

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

        4、最后执行一句

start slave;

        5、登录MySQL数据库,执行执行下面的SQL,查看从数据库的状态,如果在Linux中查看比较混乱,那么复制执行出来的数据到另一个软件中查看,就不会混乱

如果Slave_IO_Running 和Slave_SQL_Running 都为yes,则说明配置成功

show slave status; 

 第四步:测试,测试就是打开我们的windows的数据库软件,去连接Linux中数据库,连接成功以后,完后在主库创建一个表,完后再刷新从库如果出现相同的数据库那么就是配置成功。

二 、在IDEA中实现配置数据库的读写分离,从而来实现项目的读写分离 

 在IDEA中配置读写分离是通过Sharding-JDBC来实现的

第一步:导入Sharding-JDBC的依赖

         org.apache.shardingsphere

         sharding-jdbc-spring-boot-starter

         4.0.0-RC1

 第二步:在配置文件中配置数据源以及读写分离的配置

spring:

    shardingsphere:

        datasource:

            names:

                master,slave

                # 主数据源,那个url就是我们Linux中的ip地址

            master:

                type: com.alibaba.druid.pool.DruidDataSource

                driver-class-name: com.mysql.jdbc.Driver

                url: jdbc:mysql://192.168.138.100:3306/rw?characterEncoding=utf-8

                username: root

                password: root

                # 从数据源

            slave:

                type: com.alibaba.druid.pool.DruidDataSource

                driver-class-name: com.mysql.jdbc.Driver

                url: jdbc:mysql://192.168.138.101: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

        main:

                 allow-bean-definition-overriding: true

经过以上配置项目就实现了读写分离的配置。