1、安装环境
centos4.5
2、mysql-5.1的安装
mysql-5.1刚出来rc版,原先持续好久的beta版
# wget
# tar zxf mysql-5.1.22-rc.tar.gz
# cd mysql-5.1.22-rc
# ./configure --prefix=/usr/local/mysql-5.1.22 --with-charset=utf8 --with-extra-charsets=all --with-big-tables --with-comment --with-mysqld-ldflags=-all-static --enable-assembler --disable-shared --with-pthread
# make && make install
# ln -s /usr/local/mysql-5.1.22 /usr/local/mysql
# cd /usr/local/mysql
# mkdir etc ; cp share/mysql/my-large.cnf etc/my.cnf
# useradd mysql -s /sbin/nologin
# chown -R mysql.mysql .
# su -m mysql -c './bin/mysql_install_db' //安装授权表
# su -m mysql -c './bin/mysqld_safe &' //启动mysql服务
# /usr/local/mysql/bin/mysql //进入msyql
2、mysql-proxy安装
编译mysql-proxy 0.6.0需要Lua 5.1和glib 2.6.0以上版本
下载安装Lua 5.1
# wget
# tar zxf lua-5.1.2.tar.gz && cd lua-5.1.2 && make linux install
centos4.5本身的glib是2.4的,glib升级非常麻烦,mysql-proxy 0.6.0源码的配置无法通过。
# tar zxf mysql-proxy-0.6.0.tar.gz && cd mysql-proxy-0.6.0
# LUA_CFLAGS="-I/usr/local/include" LUA_LIBS="-L/usr/local/lib -llua -ldl" LDFLAGS="-lm" ./configure --prefix=/usr/local/mysql-proxy --with-mysql=/usr/local/mysql-5.1.22/bin/mysql_config
checking for LUA... yes
checking for GLIB... Requested 'glib-2.0 >= 2.6.0' but version of GLib is 2.4.7
configure: error: Package requirements (glib-2.0 >= 2.6.0) were not met:
后来直接下载了一个RHEL4的二进制版本
# wget
# tar mysql-proxy-0.6.0-linux-rhas4-x86.tar.gz
# cp mysql-proxy-0.6.0-linux-rhas4-x86/sbin/mysql-proxy /usr/local/mysql/bin
# /usr/local/mysql/bin/mysql-proxy & //在后台启动,默认启动时4040和4041端口
# /usr/local/mysql/bin/mysql -P4040 //一样能进入mysql
mysql-proxy用法
--proxy-address= 代理的ip:port,默认是0.0.0.0:4040
--proxy-read-only-backend-addresses= 代理的只读连接ip:port 默认0.0.0.0:4042(试了一下好像没有作用)
--proxy-backend-addresses= db server的地址,默认是127.0.0.1:3306,可以指定多个来做failover和load balance
--proxy-profiling enable profiling of queries (没试)
--proxy-fix-bug-25371 fix bug #25371 (mysqld > 5.1.12) for older libmysql versions (没试)
--proxy-lua-script= lua脚本文件
3、测试
分别在192.168.1.122和192.168.189上安装mysql5.1数据库,启动并添加一个用户
mysql>grant all privileges on test.* to identified by '123456';
在192.168.1.122的test数据库建立一个表hehe
create table hehe(id int(5),hehe char(255));
在192.168.1.189的test数据库建立一个表hehe
create table hehe(id int(5),name char(255));
两个表明一样却有不同的字段。
在192.168.1.104启动mysql-proxy
# LUA_PATH="/usr/local/share/mysql-proxy/?.lua" /usr/local/mysql/bin/mysql-proxy --proxy-read-only-backend-addresses=192.168.1.189:3306 --proxy-backend-addresses=192.168.1.122:3306 --proxy-lua-script=share/mysql-proxy/rw-splitting.lua &
假设104也有mysql客户端
# mysql -uabc -p123456 -h192.168.1.104 -P4040 test
对表进行查询
mysql> desc hehe;
出现的表描述是189上的就对了。
对数据进行写操作
mysql> create table jiji(id int(5),name char(255));
然后去122上看看,如果122上多了一张表就对了
总结:这个mysql数据库前端代理能对用户的mysql操作进行读写分离,对程序是透明的,减少了开发上的难度。
阅读(1386) | 评论(0) | 转发(0) |