读写分离

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

环境:
server1 (master):172.25.254.1
server2 (slave):172.25.254.2
server3 (mysql-proxy):172.25.254.3

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

测试:
server1建立数据库并插入数据
Mysql基于mysql-proxy的读写分离
server2查看
Mysql基于mysql-proxy的读写分离

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

Mysql基于mysql-proxy的读写分离
Mysql基于mysql-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基于mysql-proxy的读写分离

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

Mysql基于mysql-proxy的读写分离
需要创建logs目录
Mysql基于mysql-proxy的读写分离

master端授权远程登陆数据库的用户
grant insert,update,select on linux.* to [email protected]‘172.25.254.%’ identified by ‘Westos.3q’;
Mysql基于mysql-proxy的读写分离

三台虚拟机安装lsof监控工具,进行监控,查看3306端口哪个终端占用
lsof -i :3306
物理机连接数据库
mysql -h 172.25.254.3 -uproxy -p linux
Mysql基于mysql-proxy的读写分离
Mysql基于mysql-proxy的读写分离
Mysql基于mysql-proxy的读写分离

Mysql基于mysql-proxy的读写分离

可以看见slave端已经同步数据,说明master端已经写入数据
Mysql基于mysql-proxy的读写分离

在server2关闭slave
Mysql基于mysql-proxy的读写分离
继续在物理机连接的proxy节点中插入数据,并查看
可以看见数据并没有更新
Mysql基于mysql-proxy的读写分离
在master端查看,数据已经更新
Mysql基于mysql-proxy的读写分离

在slave端查看,发现数据并没有同步
Mysql基于mysql-proxy的读写分离

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

相关文章:

  • 2021-09-19
  • 2021-05-29
  • 2021-07-16
  • 2021-09-03
  • 2022-12-23
猜你喜欢
  • 2021-09-06
  • 2021-09-11
  • 2021-08-24
  • 2021-07-20
  • 2022-02-26
  • 2021-12-15
  • 2021-08-17
相关资源
相似解决方案