摘要:MySQL-proxy实现读写分离 前提:准备3台安装mysql的centos6,其中两台已经实现mysql集群主从复制
MySQL-proxy实现读写分离
前提:准备3台安装mysql的centos6,其中两台已经实现mysql集群主从复制
1、安装mysql-proxy
1.1官网下载mysql-proxy-0.8.5-linux-el6-x86-64bit.tar.gz并上传到centos服务器的/usr/local目录下
1.2 解压mysql-proxy
cd /usr/local
tar -zxvf mysql-proxy-0.8.5-linux-el6-x86-64bit.tar.gz
修改解压后的文件名(主要为了方便)
mv mysql-proxy-0.8.5-linux-el6-x86-64bit mysql-proxy
创建用户组
groupadd mysql-proxy
创建用户
useradd -g mysql-proxy mysql-proxy
cd /mysql-proxy
更改目录属主和属组,“.”表示当前目录
chown -R root:mysql-proxy .
配置mysql-proxy环境变量
vi /etc/profile
在最后配置export PATH=$PATH:/usr/local/mysql-proxy/bin
让配置文件生效
source /etc/profile
测试是否安装成功
mysql-proxy --help-all,若有出现mysql-proxy的相关文档信息则表示成功
2、使用命令启动mysql-proxy,参数信息在往下第4步骤配置文件启动时会说明
mysql-proxy --daemon --log-level=debug --log-file=/var/log/mysql-proxy.log --plugins="proxy" --proxy-backend-addresses="192.168.88.129:3306" --proxy-read-only-backend-addresses="192.168.88.131:3306"
查看启动日志
[root@localhost mysql-proxy]# tail /var/log/mysql-proxy.log 2017-12-28 21:53:47: (critical) plugin proxy 0.8.5 started 2017-12-28 21:53:47: (debug) max open file-descriptors = 1024 2017-12-28 21:53:47: (message) proxy listening on port :4040 2017-12-28 21:53:47: (message) added read/write backend: 192.168.88.129:3306 2017-12-28 21:53:47: (message) added read-only backend: 192.168.88.131:3306
查看监听的端口,4040为mysql-proxy默认端口,有信息则表示已启动
netstat -ntulp | grep :4040
关闭服务
killall -9 mysql-proxy
3、现在我们需要在master服务器中创建一个远程登入的mysql账号,由于master和slave服务器已经同步,因此在slave服务器都会又这个用户
创建用户:
CREATE USER 'synuser'@'%' IDENTIFIED BY '123456';
授权:GRANT ALL PRIVILEGES ON *.* TO 'synuser'@'%';
在slave服务器测试登陆mysql-proxy服务
mysql -usynuser -p123456 -h192.168.1.112 --port=4040
4、实现完以上安装和测试后,接下来开始实现读写分离,mysql-proxy服务本身是没有读写分离功能的,需要依赖lua脚本实现
在proxy服务器机器上关闭服务
killall -9 mysql-proxy
检查是否关闭
netstat -ntlup | grep 4040
关闭后开始配置mysql-proxy
cd /usr/local/mysql-proxy
创建脚本存放目录
mkdir lua
将管理脚本和读写分离配置文件复制到lua目录
cp share/doc/mysql-proxy/rw-splitting.lua ./lua #复制读写分离配置文件
cp share/doc/mysql-proxy/admin-sql.lua ./lua #复制管理脚本
修改rw-splitting.lua配置文件(实际配置时将注释删掉)
vi /lua/rw-splitting.lua if not proxy.global.config.rwsplit then proxy.global.config.rwsplit = { min_idle_connections = 1, #默认超过4个连接数时,才开始读写分离,改为1 max_idle_connections = 1, #默认8,改为1 is_debug = false }
配置启动文件,(实际配置时将注释删掉)
vi /etc/mysql-proxy.cnf [mysql-proxy]
user=root #运行mysql-proxy用户,好像没什么作用 admin-username=synuser #主从mysql共有的用户 admin-password=123456 #用户的密码 proxy-address=192.168.88.132:4040 #mysql-proxy运行ip和端口,不加端口,默认4040 proxy-read-only-backend-addresses=192.168.88.131 #指定后端从slave读取数据 proxy-backend-addresses=192.168.88.129 #指定后端主master写入数据 proxy-lua-script=/usr/local/mysql-proxy/lua/rw-splitting.lua #指定读写分离配置文件位置 admin-lua-script=/usr/local/mysql-proxy/lua/admin-sql.lua #指定管理脚本 log-file=/var/log/mysql-proxy.log #日志位置 log-level=info #定义log日志级别,由高到低分别有(error|warning|info|message|debug) daemon=true #以守护进程方式运行 keepalive=true #mysql-proxy崩溃时,尝试重启 #保存退出! chmod 660 /etc/mysql-porxy.cnf
5、配置完之后就可以使用mysql-proxy --defaults-file=/etc/mysql-proxy.cnf 启动mysql-proxy
6、测试
在master服务器登陆synuser,使用 test数据库创建tb_test表
在slave服务器登陆synuser
然后关闭slave服务器的slave服务
在proxy服务器登陆mysql -usynuser -p123456 -h192.168.88.132 --port=4040
use test; insert into tb_test value(......)
在在master服务器查询tb_test:select * from tb_test,发现表中有数据,在在slave服务器查询tb_test:select * from tb_test,发现表中无数据,证明写操作只在master服务器进行
在在proxy服务器查询tb_test:select * from tb_test,发现表中没有数据,证明读操作在slave服务器上进行
本文由职坐标整理并发布,了解更多内容,请关注职坐标MySQL数据库频道!
您输入的评论内容中包含违禁敏感词
我知道了
请输入正确的手机号码
请输入正确的验证码
您今天的短信下发次数太多了,明天再试试吧!
我们会在第一时间安排职业规划师联系您!
您也可以联系我们的职业规划师咨询:
版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
沪公网安备 31011502005948号