您的位置:首页 > 数据库 > MySQL

读写分离实践:mysql-proxy

2014-11-18 19:52 225 查看
【系统环境】

ubuntu12.04 64bit

【步骤】

下载mysql-proxy
ftp://mirror.switch.ch/mirror/mysql/Downloads/MySQL-Proxy/mysql-proxy-0.8.4.tar.gz
安装依赖包

apt-get install libevent-dev

apt-get install lua5.1-dev

apt-get install libglib2.0-dev

解压mysql-proxy-0.8.4.tar.gz得到mysql-proxy-0.8.4,进入目录

./configure --prefix=/usr/local/mysql-proxy --with-mysql=/usr/local/mysql/

注意编译要依赖mysql,所以应该先安装mysql,否则编译不通过。

make && make install

接下来把需要用到的lua脚本拷贝到安装目录中

cp lib/rw-splitting.lua /usr/local/mysql-proxy/

修改rw-splitting.lua内容,找到如下

-- connection pool

if not proxy.global.config.rwsplit then

proxy.global.config.rwsplit = {

min_idle_connections = 4,

max_idle_connections = 8,

is_debug = false

}

end

把4和8都换成1,因为只有当客户端连接大于配置的4时候,才会启用读写分离,否则都从master读写,换成1后,客户端多起几个连接,多查几次就发现读写分离起作用了。

cp lib/admin.lua
/usr/local/mysql-proxy/

在安装目录中新建 /usr/local/mysql-proxy/mysql-proxy.cnf 配置文件,内容如下

[mysql-proxy]

admin-username = test

admin-password = mima

keepalive=true

proxy-backend-addresses = 192.168.1.101:3306

proxy-read-only-backend-addresses = 192.168.1.93:3306

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

admin-lua-script = /usr/local/mysql-proxy/admin.lua

log-file = /data/log/mysql-proxy.log

log-level = debug

admin-username
访问proxy时候用到的用户名,这个要求后端所有的db都用同一套用户名密码才能访问。

admin-password 密码

keepalive
找个参数很有用,保持mysql-proxy断线重连

proxy-backend-addresses
主db(master)地址,可读可写

proxy-read-only-backend-addresses
从db(slave)地址,只读

proxy-lua-script
执行读写分离的lua脚本地址

admin-lua-script
验证用户名密码的脚本

log-file
日志地址

log-level
日志级别,debug表示调试

启动

/usr/local/mysql-proxy/bin/mysql-proxy
--defaults-file=/usr/local/mysql-proxy/mysql-proxy.cnf&

测试

mysql -utest -pmima -P4040

这里设置端口为4040,是因为proxy默认端口是4040

连接上后,可以测试sql命令了。

【读写分离】

为了看到读写分离效果,如果原本主从db之间有replication同步,需要关掉,否则在master修改后立刻会同步到slave,这样就看不到两个db不同的差异了,读的时候不知道从哪个db读的。

确认同步已经关闭,客户端多建立几条连接,这样一开始默认连接的是master,后来的连接查询就会转到slave。试着修改一个数据库表的值,然后查询该值,多查几次会发现你修改过的值没有修改,那是因为已经读取了从db。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: