MySQL Proxy更强大的一项功能是实现“读写分离”,基本原理是让主数据库处理事务性查询,让从库处理SELECT查询。数据库复制被用来把事务性查询导致的变更同步到集群中的从库。
以上摘自百度百科
我看重的功能 是负载均衡,故障转移,通过和MySQL 主从复制配合(MASTER ,SLAVE ),还可以实现 ‘读写分离’.
一。安装
参考网上一堆资料,使用源码安装还是失败。以后有时间再研究。转向使用二进制安装,内已包含LUA5.1等
操作系统为CentOS 5.5 32位,从官网下载MySQL Proxy 0.8.2
mysql-proxy安装于192.168.234.131
两台MySQL服务器分别为
MASTER:192.168.234.132
Slave : 192.168.234.133
下载地址为:
# wget -c http://dev.mysql.com/get/Downloads/MySQL-Proxy/mysql-proxy-0.8.2-linux-rhel5-x86-32bit.tar.gz/from/ftp://ftp.stu.edu.tw/pub/Unix/Database/Mysql/
# tar mysql-proxy-0.8.2-linux-rhel5-x86-32bit.tar.gz -C /usr/local
# mv mysql-proxy-0.8.2-linux-rhel5-x86-32bit mysql-proxy
增加路径
#vim ~/.bash_profile
PATH=$PATH:$HOME/bin:/usr/local/mysql-proxy/bin
export PATH
二、配置
下载写好的服务脚本:
#wget -c http://customcode.googlecode.com/files/mysql-proxy
# cp mysql-proxy /etc/init.d/mysql-proxy
修改
# vim /etc/init.d/mysql-proxy
PROXY_PATH=/usr/local/mysql-proxy/bin
改成unix模式
:set fileformat=unix
# chmod 755 /etc/init.d/mysql-proxy
# chkconfig mysql-proxy on
修改配置文件
# vi /etc/sysconfig/mysql-proxy
# options to mysql-proxy
# do not remove --daemon
PROXY_OPTIONS="--proxy-backend-addresses=192.168.234.133:3306 --proxy-backend-addresses=192.168.234.132:3306 --daemon"
其它配置参考官网文档
http://dev.mysql.com/doc/refman/5.1/en/mysql-proxy-configuration.html
两台mysql上赋权
grant all on *.* to "root" @ "192.168.234.131";
flush privileges;
启动服务
service mysql-proxy start
三、测试
3.1.负载均衡 /etc/sysconfig/mysql-proxy 配置为
PROXY_OPTIONS="--proxy-backend-addresses=192.168.234.133:3306 --proxy-backend-addresses=192.168.234.132:3306 --daemon"
数据库服务器建同一张表t1 表中,数据不同,
use test;
CREATE TABLE `t1` (
`iCode` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(50) DEFAULT NULL,
PRIMARY KEY (`iCode`)
);132
insert into t1 (name) values ('master');
133
insert into t1 (name) values ('slave');
打开多个窗口,运行
mysql -h 192.168.234.131 -u -p -P 4042 -e"select name from test.t1;"
可看到不同结果,mysql-prxoy 会将查询分配到mysql服务器
3.2. 故障转移
采用1的配置,在132上停止mysql
service mysqld stop
运行:
mysql -h 192.168.234.131 -u -p -P 4042 -e"select name from test.t1;"
仍能正常查询,只有133MySQL上数据。
3.3读写分离
读写分离需依赖LUA脚本,配置文件改为:
PROXY_OPTIONS="--proxy-backend-addresses=192.168.234.133:3306 --proxy-read-only-backend-addresses=192.168.234.132:3306 \
--proxy-lua-script=/usr/local/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua --keepalive --daemon"133为可写,132 为只读,使用rw-splitting.lua为读写分离脚本
还需配置Master(133)-Slave(132) 复制。