免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1353 | 回复: 0
打印 上一主题 下一主题

mysql读写分离(mysql-proxy) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-07-11 14:18 |只看该作者 |倒序浏览

简单的说,MySQL Proxy就是一个连接池,负责将前台应用的连接请求转发给后台的数据库,并且通过使用
lua脚本
,可以实现复杂的连接控制和过滤,从而实现读写分离和负载平衡。对于应用来说,MySQL Proxy是完全透明的,应用则只需要连接到MySQL Proxy的监听端口即可。当然,这样proxy机器可能成为单点失效,但完全可以使用多个proxy机器做为冗余,在应用服务器的连接池配置中配置到多个proxy的连接参数即可。
环境如下:写数据库:192.168.0.111
读数据库:192.168.0.113
mysql-proxy:192.168.0.112
安装过程如下:
1. 解压mysql-proxy
下载已经编译好的安装包,或者预编译安装包均可,在这里,使用预编译版本。
tar zxf mysql-proxy-0.6.1-linux-rhas4-x86.tar.gz
cd mysql-proxy-0.6.1-linux-rhas4-x86
2.将lua脚本放到/usr/local/share下
mv sbin/mysql-proxy /usr/local/sbin/
mv share/mysql-proxy /usr/local/share/
3.删除符号连接等垃圾代码
strip /usr/local/sbin/mysql-proxy
4.编译启动管理脚本:
vi /etc/init.d/mysql-proxy
#!/bin/bash
export LUA_PATH=/usr/local/share/mysql-proxy/?.lua
mode=$1
if [ -z "$mode" ] ; then
mode="start"
fi
case $mode in
'start')
mysql-proxy --daemon \
--admin-address=:4401 \
--proxy-address=:3307 \
--proxy-backend-addresses=192.168.0.111:3306 \
--proxy-read-only-backend-addresses=192.168.0.113:3306 \
--proxy-lua-script=/usr/local/share/mysql-proxy/rw-splitting.lua
;;
'stop')
killall mysql-proxy
;;
'restart')
if $0 stop ; then
$0 start
else
echo  "retart failed!!!"
exit 1
fi
;;
esac
exit 0
5.给脚本执行权限
chmod +x /etc/init.d/mysql-proxy
启动脚本解释如下:
--daemon 采用daemon方式启动
--admin-address=:4401 指定mysql-proxy的管理端口,在这里,表示本机的4401端口
--proxy-address=:3307 指定mysql-proxy的监听端口(客户端连接指定的端口)--proxy-backend-addresses=192.168.0.111:3306 指定写操作mysql主机的端口
--proxy-read-only-backend-addresses=192.168.0.112:3306 指定只读的mysql主机端口
--proxy-lua-script=/usr/local/share/mysql-proxy/rw-splitting.lua 指定lua脚本,在这里,使用的是rw-splitting脚本,用于读写分离.
完整的参数可以运行以下命令查看:
mysql-proxy --help-all
6.修正rw-splitting.lua脚本
vi /usr/local/share/mysql-proxy/rw-splitting.lua
276-282行修改成如下:
if cmd.type ~= proxy.COM_INIT_DB and
c.default_db and c.default_db ~= s.default_db then
print(" server default db: " .. s.default_db .. "'")
print(" client default db: " .. c.default_db .. "'")
print(" syncronizing")
proxy.queries:prepend(2,string.char(proxy.COM_INIT_DB) ..c.default_db)
end
这个就解决了ERROR 1105 (07000): can't change DB to on slave xxx.xxx.xxx.xxx:3306的问题。
7.启动和关闭命令:
/etc/init.d/mysql-proxy start
/etc/init.d/mysql-proxy stop
8.客户端测试
mysql -u tongbu --port=3307 -h 192.168.0.112 -D tongbu


本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u3/100752/showart_1993101.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP