聊聊 Sharding-JDBC 实现 读写分离~(一)

love374
发布于 2022-7-8 17:29
浏览
0收藏

 

大家好,我是不才陈某~

 

这是《ShardingSphere 进阶》专栏的第3篇文章,往期文章如下:

  1. 聊聊 Sharding-JDBC 分库分表
  2. 聊聊 Sharding-JDBC 数据脱敏


今天聊一下如何通过Sharding-JDBC简单的实现读写分离~

 

为什么要读写分离?
读写分离则是将事务性的增、改、删操作在主库执行,查询操作在从库执行。

 

一般业务的写操作都是比较耗时,为了避免写操作影响查询的效率,可以使用读写分离。

 

当然读写分离并不是万能的,还有前面的分库分表方案。

 

读写分离如何搭建?
MySQL搭建读写分离非常简单,一般有一主一从、一主多从,对于MySQL的主从的相关概念这里就不再详细介绍了。

 

下面陈某就以MySQL5.7为例,使用docker搭建一个一主一从的架构,步骤如下:

 

1. pull镜像
使用如下命令从镜像仓库中下载镜像:

docker pull mysql:5.7.26

 

2. 创建目录
MySQL数据和配置文件挂载的目录:

mkdir -p /usr/local/mysqlData/master/cnf
mkdir -p /usr/local/mysqlData/master/data

mkdir -p /usr/local/mysqlData/slave/cnf 
mkdir -p /usr/local/mysqlData/slave/data 

 

3. 编写配置master节点配置
修改MySQL主节点的配置文件,内容如下:

vim /usr/local/mysqlData/master/cnf/mysql.cnf

[mysqld]
## 设置server_id,注意要唯一
server-id=1
## 开启binlog
log-bin=mysql-bin
## binlog缓存
binlog_cache_size=1M
## binlog格式(mixed、statement、row,默认格式是statement)
binlog_format=mixed

 

4. 编写配置slave节点配置
修改MySQL从节点的配置文件,内容如下:

vim /usr/local/mysqlData/slave/cnf/mysql.cnf

[mysqld]
## 设置server_id,注意要唯一
server-id=2
## 开启binlog,以备Slave作为其它Slave的Master时使用
log-bin=mysql-slave-bin
## relay_log配置中继日志
relay_log=edu-mysql-relay-bin
## 如果需要同步函数或者存储过程
log_bin_trust_function_creators=true
## binlog缓存
binlog_cache_size=1M
## binlog格式(mixed、statement、row,默认格式是statement)
binlog_format=mixed
## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断
## 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
slave_skip_errors=1062

 

5. 启动MySQL主节点
命令如下:

docker run -itd -p 3306:3306 --name master -v /usr/local/mysqlData/master/cnf:/etc/mysql/conf.d -v /usr/local/mysqlData/master/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7.26

 

6. 添加复制master数据的用户reader,供从服务器使用
命令如下:

[root@aliyun /]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                               NAMES
6af1df686fff        mysql:5.7           "docker-entrypoint..."   5 seconds ago       Up 4 seconds        0.0.0.0:3306->3306/tcp, 33060/tcp   master

[root@aliyun /]# docker exec -it master /bin/bash

root@41d795785db1:/# mysql -u root -p123456

mysql> GRANT REPLICATION SLAVE ON *.* to 'reader'@'%' identified by 'reader';
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)

 

7. 创建并运行mysql从服务器
命令如下:

docker run -itd -p 3307:3306 --name slaver -v /usr/local/mysqlData/slave/cnf:/etc/mysql/conf.d -v /usr/local/mysqlData/slave/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7.26

 

文章转自公众号:码猿技术专栏

标签
已于2022-7-8 17:29:39修改
收藏
回复
举报
回复
    相关推荐