Skip to content

MySQL读写分离 ​

一、主从库配置 ​

  1. ubuntu上安装Mysql

  2. 修改主库环境配置

INFO

进入 mysql 环境配置 mysql.cnf

vim /etc/mysql/mysql.conf.d/mysql.cnf

# 添加以下环境配置
[mysqld]

#[必须]主服务器唯一ID
server-id=1

#[必须]启用二进制日志,无后缀的文件名。也可以是本地的路径/log/bin-log
log-bin=bin-log

修改主库远程操作配置

INFO

进入数据库环境配置 mysqld.cnf

vim /etc/mysql/mysql.conf.d/mysqld.cnf

bind-address = 127.0.0.1 // 这里表示只能本机操作

bind-address = 0.0.0.0 // 这里表示所有IP地址都可以操作

重启数据库

systemctl restart mysql.service

  1. 创建从库帐号密码

步骤

(1)进入 mysql 命令行界面

mysql -u账号 -p密码

(2)创建 从库 操作账号密码 slave2

create user 'slave2'@'%' identified by '111111';

flush privileges;

PS: host 为 'localhost' 和 '127.0.0.1' 时,只允许本机登录,而 host 为 '%' 或 'IP地址' 则允许远程账号登录

(3)修改 host 命令

use mysql

update user set host='localhost' where user = 'slave2';

flush privileges;

(4)给 slave1 账号 授予权限

grant replication slave on master_db.* to 'slave2'@'%';

flush privileges;

查看帐号授权情况

show grants for 'slave2'@'%';

  1. 查看主库状态

show master status;

  1. 从库配置

首先设置id,和主库一样的操作

WARNING

如果从库是直接将主库虚拟机复制来的,需要修改从库的mysql的uuid

/var/lib/mysql/auto.cnf

  • 创建复制命令配置
sql
change master to
master_host = '主库IP地址',
master_port = 主库端口,
master_user = 'slave2',
master_password = '111111',
master_log_file = 'bin-log.000005', #File
master_log_pos = 997;  #Position
  • 命令
sql
start slave    // 启动从库复制命令

stop slave    // 停止从库复制命令

reset slave   // 重置从库复制命令
  • 查看从库状态
sql
show slave status\G;

TIP

如果已经启动复制命令成功了,那么 slave_io_running 和 slave_sql_running 都是 yes

如果失败,可以看Slave soL Running state

二、SpringBoot实现读写分离 ​

1、导入依赖 ​

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

2、修改配置文件 ​

yaml
spring:
  profiles:
    active: dev
  main:
    allow-circular-references: true
    allow-bean-definition-overriding: true
  shardingsphere:
    datasource:
      names:
        master,slave
      # 主数据源
      master:
        type: com.alibaba.druid.pool.DruidDataSource
        driver-class-name: com.mysql.cj.jdbc.Driver
        url: jdbc:mysql://192.168.175.129:3306/sky_take_out?characterEncoding=utf-8
        username: root
        password: 12345678
      # 从数据源
      slave:
        type: com.alibaba.druid.pool.DruidDataSource
        driver-class-name: com.mysql.cj.jdbc.Driver
        url: jdbc:mysql://192.168.175.130:3306/sky_take_out?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