基于mysql-proxy的MySQL读写分离

读写分离

mysql的读写分离的基本原理是:让master(主数据库)来响应事务性操作,让slave(从数据库)来响应select非事务性操作,然后再采用主从复制来把master上的事务性操作同步到slave数据库中。
图解:
在这里插入图片描述

环境:
server1 (master):172.25.254.1
server2 (slave):172.25.254.2
server3 (mysql-proxy):172.25.254.3
本篇博客中涉及的所有软件包下载可参考此博客:https://blog.csdn.net/qq657886445/article/details/83662696

Server1与server2简单配置主从复制
主从复制详细配置可参考上一篇博客:https://blog.csdn.net/qq657886445/article/details/83588877

测试:
server1建立数据库并插入数据
在这里插入图片描述
server2查看
在这里插入图片描述

Server3
mysql-proxy配置

tar zxf mysql-proxy-0.8.5-linux-el6-x86-64bit.tar.gz
mv mysql-proxy-0.8.5-linux-el6-x86-64bit /usr/local/mysql-proxy
cd /usr/local/mysql-proxy/
mkdir conf
vim ~/.bash_profile         # 添加环境变量
PATH=$PATH:$HOME/bin:/usr/local/mysql-proxy/bin
source ~/.bash_profile
vim conf/mysql-proxy.conf      #mysql-proxy每次启动是需要添加参数,可以将参数写入文件中,方便启动
[mysql-proxy]
deamon=true          #采用daemon方式启动
user=root
keepalive=true       #保持连接
proxy-address=172.25.254.3:3306                 #mysql proxy的监听端口
proxy-backend-addresses=172.25.254.1:3306      #指定master主机
proxy-read-only-backend-addresses=172.25.254.2:3306  #指定slave主机
proxy-lua-script=/usr/local/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua  # 指定lua脚本,在这里,使用的是rw-splitting脚本,用于读写分离
log-file=/usr/local/mysql-proxy/logs/mysql-proxy.log  #指定日志保存路径,需要创建logs目录
log-level=debug     #日志级别
plugins=proxy

在这里插入图片描述
在这里插入图片描述

更改lua脚本
vim /usr/local/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua
默认最小4个最大8个以上的客户端连接才会实现读写分离, 现改为最小1个最大2个
这是因为Mysql Proxy会检测客户端连接, 当连接没有超过min_idle_connections预设值时, 不会进行读写分离, 即查询操作会发生到Master上.
在这里插入图片描述

mysql-proxy  --defaults-file=/usr/local/mysql-proxy/conf/mysql-proxy.conf &
根据报错进行修改,解决权限问题,再次运行
chmod 660 /usr/local/mysql-proxy/conf/mysql-proxy.conf

在这里插入图片描述
需要创建logs目录
在这里插入图片描述

master端授权远程登陆数据库的用户
grant insert,update,select on linux.* to proxy@‘172.25.254.%’ identified by ‘Westos.3q’;
在这里插入图片描述

三台虚拟机安装lsof监控工具,进行监控,查看3306端口哪个终端占用
lsof -i :3306
物理机连接数据库
mysql -h 172.25.254.3 -uproxy -p linux
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

可以看见slave端已经同步数据,说明master端已经写入数据
在这里插入图片描述

在server2关闭slave
在这里插入图片描述
继续在物理机连接的proxy节点中插入数据,并查看
可以看见数据并没有更新
在这里插入图片描述
在master端查看,数据已经更新
在这里插入图片描述

在slave端查看,发现数据并没有同步
在这里插入图片描述

server2 开启slave.并查看,看见数据已经同步
在这里插入图片描述
在物理机连接的proxy节点中查看,发现数据已经更新
此实验说明proxy节点上执行insert相当于写入到了master上,而查询的数据是从slave上读取的,实现了读写分离。
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq657886445/article/details/83662274