一.原理
在配置完成主从复制的基础上,通过一台另外的代理服务器做转发,若判断为读,则走从库;若为写,则走主库
二.环境
三台ubuntu16.04(x86_64)虚拟机
ip:192.168.3.221(主); 192.168.2.254(从);192.168.2.245(mysql_proxy代理)
mysql版本:14.14 Distrib 5.7.23, for Linux(x86_64),分别在主从数据库安装,代理服务器无需安装
lua版本:Lua 5.3.5
mysql-proxy版本:mysql-proxy-0.8.5-linux-glibc2.3-x86-64bit
三.配置(以下操作在root用户下)
1.安装lua
代理服务器(192.168.2.245)中进行
MySQL-Proxy的读写分离主要是通过rw-splitting.lua脚本实现的,因此需要安装lua。
官网下载:http://www.lua.org/download.html
步骤:
0)下载最新Lua版本,当下最新版为Lua5.3.5
1 ) 将安装包Lua5.3.4.tar.gz移动到/Home/czh/Lua 目录下(个人喜好)
2)解压:tar -zxvf lua-5.3.4.tar.gz
3)编译:make linux test
若出现错误:fatal error: readline/readline.h: No such file or directory
执行:
apt-get install libreadline-dev
再次编译:make linux test
2.安装mysql-proxy
代理服务器(192.168.2.245)中进行
官网下载:https://downloads.mysql.com/archives/proxy/
步骤:
0) 下载对应版本的最新压缩包
1) 将安装包mysql-proxy-0.8.5-linux-glibc2.3-x86-64bit.tar.gz移动到/Home/czh/mysql-proxy (个人喜好)
2) 解压:tar -zxvf mysql-proxy-0.8.5-linux-glibc2.3-x86-64bit.tar.gz
3)为了方便把rw-splitting.lua文件放在靠外的位置
#cp /home/czh/mysql-proxy/mysql-proxy-0.8.5-linux-glibc2.3-x86-64bit/share/doc/mysql-proxy/rw-splitting.lua /home/czh/mysql-proxy/mysql-proxy-0.8.5-linux-glibc2.3-x86-64bit/
3.修改rw-splitting.lua配置文件
代理服务器(192.168.2.245)中进行
min_idle_connections = 1, //默认为4
max_idle_connections = 1, //默认为8
4.设置并启动mysql-proxy
代理服务器(192.168.2.245)中进行
在/home/czh/mysql-proxy/mysql-proxy-0.8.5-linux-glibc2.3-x86-64bit/bin目录下,执行:
mysql-proxy --proxy-read-only-backend-addresses=192.168.2.245:3306
--proxy-backend-addresses=192.168.3.221:3306
--proxy-lua-script=/home/czh/mysql-proxy/mysql-proxy-0.8.5-linux-glibc2.3-x86-64bit/rw-splitting.lua &
192.168.3.221 master 主机 只写
192.168.2.245 slaver 从机 只读
当运行上面语句后,查询进程应当有4040(mysq-proxy使用的端口)
5.创建测试用户
主数据库(192.168.3.221)中进行
mysql>grant all on *.* to 'czh_test3'@'192.168.2.245' identified by '123456';
四.测试
我在window系统中的navicat用以上账户登录mysql(ip为代理服务器的ip)
为了测试,先关闭主从复制
从数据库(192.168.2.254)中进行
mysql>stop slave;
1.测试写分离
在navicat插入数据,登陆主数据库(192.168.3.221),发现主库更新;登陆从数据库(192.168.2.254),发现从库未更新。说明写分离。
2.测试读分离
在navicat中查看,也没有更新的内容,说明读分离。
五.参考
https://blog.csdn.net/u010739551/article/details/49508239
https://www.cnblogs.com/phpstudy2015-6/p/6687480.html#_label0