springboot + durid + mybatis + docker实现mysql读写分离 - 1

前言

本文旨在实现mysql读写分离,在一定程度上提高数据读写性能,减轻数据库负荷压力。思路是搭建mysql主从复制集群(一主二从),然后通过数据源的配置和逻辑控制实现读写分离(也可以通过中间件实现,本文不作讨论)
第一步先搭建一个主从复制mysql集群

主从集群搭建

环境准备

本文环境基于docker搭建,通过三个镜像模拟三台不同主机的mysql数据库,搭建一主二从的集群环境

配置文件准备

主配置文件

修改(增加)如下配置

log_bin = mysql-bin
# 指定唯一id
server_id = 10

sync_binlog = 1

从配置文件

修改(增加)如下配置

log_bin = mysql-bin
# 指定唯一id
server_id = 2
relay_log = /var/lib/mysql/mysql-relay-bin
log_slave_updates = 1
read_only = 1

# 不同步哪些数据库
binlog-ignore-db = mysql
binlog-ignore-db = test
binlog-ignore-db = information_schema

启动主容器

docker run -d --name mysql-master  -v /home/docker/volumes/mysql-master/logs:/logs -v /home/docker/volumes/mysql-master/data:/usr/lib/mysql -v /home/docker/volumes/mysql-master-conf/my.cnf:/etc/mysql/my.cnf -e MYSQL_ROOT_PASSWORD=123456 -p 3306:3306 mysql:5.5

启动从容器1

docker run -d --name mysql-slave1  -v /home/docker/volumes/mysql-slave1/logs:/logs -v /home/docker/volumes/mysql-slave1/data:/usr/lib/mysql -v /home/docker/volumes/mysql-slave1-conf/my.cnf:/etc/mysql/my.cnf -e MYSQL_ROOT_PASSWORD=123456 --link mysql-master:master -p 3307:3306 mysql:5.5

启动从容器2

docker run -d --name mysql-slave2 -v /home/docker/volumes/mysql-slave2/logs:/logs -v /home/docker/volumes/mysql-slave2/data:/usr/lib/mysql -v /home/docker/volumes/mysql-slave2-conf/my.cnf:/etc/mysql/my.cnf -e MYSQL_ROOT_PASSWORD=123456 --link mysql-master:master -p 3308:3306 mysql:5.5

在master创建用于复制的账号

grant replication slave, replication client on *.* to repl@'%' IDENTIFIED by '123456';

查询master日志文件

show master status;

结果如下
结果

从机加入主机

在slave1和slave2执行sql

CHANGE MASTER TO 
 master_host = 'master',
 master_user = 'repl',
 master_password = '123456',
 master_log_file = 'mysql-bin.000001',
 master_log_pos = 350;

master_host:创建容器是通过**–link命令将连接容器,并指明主机别名为master**,当然也可以是ip(如果是ip再加上master_port属性指定端口)
master_port: 主机端口
master_user:即之前在主机创建的用于复制的账号
master_password:同上
master_log_file:在master查看的日志文件名
master_log_pos:即开始复制的日志起点,0表示从第一行开始,350即之前查询到的主机日志当前位置

开始复制

start slave;

可以通过show slave status查看复制状态

验证

master新建数据库copy_test,新建表test_user插入若干数据,并授权给新建用户test
查看从机,发现完美复制

总结

至此,主从复制的集群已搭建,现在我们明确主从的分工,主机只负责写入,而从机负责数据的读取。我们搭建一个测试项目,通过数据源的配置和切面控制实现读写分离

下一篇:springboot + durid + mybatis + docker实现mysql读写分离 - 2

猜你喜欢

转载自blog.csdn.net/weixin_42189048/article/details/106783352