MySQL读写分离
MySQL读写分离
一、主从库配置
ubuntu上安装Mysql
修改主库环境配置
相关信息
进入 mysql 环境配置 mysql.cnf
vim /etc/mysql/mysql.conf.d/mysql.cnf
# 添加以下环境配置
[mysqld]
#[必须]主服务器唯一ID
server-id=1
#[必须]启用二进制日志,无后缀的文件名。也可以是本地的路径/log/bin-log
log-bin=bin-log
修改主库远程操作配置
相关信息
进入数据库环境配置 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)进入 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'@'%';
- 查看主库状态
show master status;
- 从库配置
首先设置id,和主库一样的操作
注意
如果从库是直接将主库虚拟机复制来的,需要修改从库的mysql的uuid
/var/lib/mysql/auto.cnf
- 创建复制命令配置
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
- 命令
start slave // 启动从库复制命令
stop slave // 停止从库复制命令
reset slave // 重置从库复制命令
- 查看从库状态
show slave status\G;
提示
如果已经启动复制命令成功了,那么 slave_io_running 和 slave_sql_running 都是 yes
如果失败,可以看Slave soL Running state
二、SpringBoot实现读写分离
1、导入依赖
<dependency>
<groupId>org.apache.shardingsphere</groupId>
<artifactId>sharding-jdbc-spring-boot-starter</artifactId>
<version>4.0.0-RC1</version>
</dependency>
2、修改配置文件
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