spring mysql-proxy_Mysql-proxy主从搭建读写分离全过程

本文详细介绍了如何安装和配置MySQL Proxy 0.8.1以实现主从数据库的读写分离。通过编辑配置文件并设置lua脚本,实现了当连接数未超过预设值时,查询操作发生在主库,而超过预设值时,查询转向从库。同时提供了启动、停止和重启MySQL Proxy的shell脚本,以及测试读写分离效果的方法。
摘要由CSDN通过智能技术生成

废话不说!

Mysql-proxy是什么,大家都知道,不知道的就别往下看了...

首先搭建 mysql 主从数据库,参考: http://blog.csdn.net/swengineer/archive/2011/03/11/6239711.aspx

下载 mysql-proxy 最新版,本文撰写时最新版本为 MySQL Proxy 0.8.1 alpha

安装 mysql-proxy 步骤如下:

解压 mysql-proxy-0.8.1-linux-glibc2.3-x86-32bit.gz

tar zxvf mysql-proxy-0.8.1-linux-glibc2.3-x86-32bit.gz

cp -R mysql-proxy-0.8.1-linux-glibc2.3-x86-32bit /usr/local/proxy-mysql

新建或编辑 /etc/mysql-proxy.cnf 文件,添加以下内容 ( 具体参数根据实际情况修改 ) :

vi /etc/mysql-proxy.cnf

[mysql-proxy]

admin-username = zhangdongyu

admin-password = 123123

daemon = true

keepalive = true

proxy-backend-addresses = 192.168.0.88:3306

proxy-read-only-backend-addresses = 192.168.0.88:3307

proxy-lua-script = /usr/local/proxy-mysql/share/doc/mysql-proxy/rw-splitting.lua

admin-lua-script = /usr/local/proxy-mysql/share/doc/mysql-proxy/admin-sql.lua

log-file = /usr/local/proxy-mysql/cn.log

log-level = debug

主要参数注解:

proxy-backend-addresses                    mysql 主库(写)地址

proxy-read-only-backend-addresses     mysql 从库(读)地址

proxy-lua-script                                 读写分离脚本

admin-lua-script                                 admin 脚本

admin-username                                 数据库用户名(主从上都需建立相同用户)

admin-password                                 数据库密码

daemon                                             daemon 进程运行

keepalive                                           保持连接(启动进程会有 2 个,一号进程用来监视二号进行,如果二号进程死掉自动重建,此参数在旧版本中无法使用)

编辑 profile/.bash_profile 脚本

vi /etc/profile( 或者 .bash_profile)

LUA_PATH="/usr/local/proxy-mysql/share/doc/mysql-proxy/?.lua"

export LUA_PATH

export PATH=$PATH:/usr/local/proxy-mysql/bin

:wq

source /etc/profile

为方便建立建立 mysql-proxy.sh 脚本

#!/bin/bash

mode=$1

if [ -z "$mode" ] ; then

mode="start"

fi

case $mode in

start)

mysql-proxy --defaults-file=/etc/mysql-proxy.cnf>/usr/local/proxy-mysql/cn.log &

;;

stop)

killall -9 mysql-proxy

;;

restart)

if $0 stop ; then

$0 start

else

echo "Restart failed!"

exit 1

fi

;;

esac

exit 0

启动

mysql-proxy

sh

脚本

启动:

./mysql-proxy.sh

./mysql-proxy.sh start

49fc228b98f44d5724378f8fe59fe955.png

重启:

./mysql-proxy.sh restart

停止:

./mysql-proxy.sh stop

测试:

为达到测试效果,修改

admin-sql.lua

脚本以下两行

vi /usr/local/proxy-mysql/share/doc/mysql-proxy/rw-splitting.lua

if not proxy.global.config.rwsplit then

proxy.global.config.rwsplit = {

min_idle_connections = 1, # 修改最小连接为 1

max_idle_connections = 2, # 修改最大连接为 2

is_debug = true #debug 为 true

}

end

重启

mysql-proxy

代理

开启两个终端分别连接代理:

ONE

./mysql -h192.168.0.88 -uzhangdongyu -p123123 -P4040

TWO

./mysql -h192.168.0.88 -uzhangdongyu -p123123 -P4040

可看到连接成功信息:

157ea7eefba16e072f75810a8ecaf68c.png

操作

ONE

客户端:

执行

select

语句观察数据库

log

文件

select * from z_member_info;

观察主从库日志文件,发现查询发生在主库?

主库:

192.168.0.88:3306

日志文件:

tail -f /usr/local/mysql/localstate/mysqlexecute.log

c2c6edd99de58ce4ebd1d0525b046bda.png

这是因为

mysql-proxy

代理会检测客户端连接,当连接没有超过

min_idle_connections

预设值时,不会进行读写分离,即查询操作会发生到主库上。

操作

TWO

客户端:

执行

select

语句观察数据库

log

文件

select * from z_member_info;

观察主从库日志文件,发现主库没有任何记录,查询日志记录在从库。

从库:

192.168.0.88:3306

日志文件:

tail -f /usr/local/mysql3307/localstate/mysqlexecute.log

0662b0a575aff2eb38f7ef772953e52c.png

操作两个终端进行

insert

操作,会发现写操作始终被主库(

3306

)日志文件记录。

3165ee922991d84ea372c5b052f0b1a9.png

至此

mysql-proxy

安装测试完成。

注:生产环境一定要根据实际情况配置相关文件,至于

lua

文件强烈推荐读者自行修改,目前正在研究

lua

文件的优化与定制,不久会发上来(果断时间再说了,用到时候再仔细研究下..忙啊..)。

f2d7eb9f0ca694563522d99d25435522.png

大小: 5.4 KB

3def355f574df4204f49c7ad544cbce3.png

大小: 3.2 KB

af9f0d4481e90d87b53dc64189017d72.png

大小: 784 Bytes

28f82401aaeb7853f79ecd5086f99887.png

大小: 2.8 KB

52f913c9fcaaf0703bea2554aa15befb.png

大小: 825 Bytes

分享到:

18e900b8666ce6f233d25ec02f95ee59.png

72dd548719f0ace4d5f9bca64e1d7715.png

2011-06-24 13:03

浏览 3470

分类:数据库

评论

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值