1.依赖包安装下载:
# yum -y install gcc gcc-c++ autoconf mysql-devel libtool pkgconfig ncurses ncurses-devel
wget http://dev.mysql.com/get/Downloads/MySQL-Proxy/mysql-proxy-0.8.2.tar.gz/from/http://mysql.oss.eznetsols.org/
wget http://monkey.org/~provos/libevent-2.0.13-stable.tar.gz
wget http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.12.tar.gz
wget http://ftp.gnome.org/pub/gnome/sources/glib/2.18/glib-2.18.4.tar.gz
wget ftp://ftp.cwru.edu/pub/bash/readline-6.1.tar.gz
wget http://www.lua.org/ftp/lua-5.1.4.tar.gz
2.安装libevent
tar zxvf libevent-2.0.13-stable.tar.gz
cd libevent-2.0.13-stable
./configure --prefix=/usr/local/libevent
make
make install
3.安装libiconv
tar zxvf libiconv-1.12.tar.gz
cd libiconv-1.12
./configure
make && make install
4.安装glib
tar zxvf glib-2.18.4.tar.gz
cd glib-2.18.4
./configure --with-libiconv
make
make install
5.安装readline
tar zxvf readline-6.1.tar.gz
cd readline-6.1
./configure
make
make install
为了让动态链接库为系统所共享,我们这里用ldconfig
ldconfig -v
6.安装lua
tar zxvf lua-5.1.4.tar.gz
cd lua-5.1.4/src
# 64位系统,需在CFLAGS里加上-fPIC ,我们用vim编辑下src/Makefile文件,修改代码如下所示:
vi Makefile
CFLAGS= -O2 -Wall -fPIC $(MYCFLAGS)
#cd ..
#make linux
#make install
7.配置pkg-config 环境变量,命令如下所示:
# cp etc/lua.pc /usr/local/lib/pkgconfig/
# export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
8.安装mysql-proxy
tar zxvf mysql-proxy-0.8.2.tar.gz
cd mysql-proxy-0.8.2
./configure --prefix=/usr/local/mysql-proxy
make
make install
cp lib/rw-splitting.lua /usr/local/mysql-proxy/ #读写分离脚本
cp lib/admin.lua /usr/local/mysql-proxy/lib
二、到这里MySQL-proxy已基本安装完成,接下来就是MySQL Proxy0.8.2的测试和配置了。
MySQL Proxy环境设置说明
Master MySQL服务器:192.168.2.117
Slave MySQL服务器:192.168.192.168.2.115
MySQL Proxy服务器:192.168.2.112
1.mysql-proxy选项说明,大家也可以用mysql-proxy –help-all查看它的帮助选项,命令如下所示:
mysql-proxy --help-all
管理功能选项:
--admin-address=host:port 指定一个mysqo-proxy的管理端口,缺省是4041;
--admin-username=<string> username to allow to log in
--admin-password=<string> password to allow to log in
--admin-lua-script=<filename> script to execute by the admin plugin
代理功能选项:
-P,--proxy-address=<host:port> 是mysql-proxy 服务器端的监听端口,缺省是4040,建议改为3306,方便开发人员写代码。
-r,--proxy-read-only-backend-addresses=<host:port> 只读Slave的地址和端口,缺省为不设置;
-b,--proxy-backend-addresses=<host:port> 远程Master地址和端口,可设置多个做failover和load balance,缺省是127.0.0.1:3306;
--proxy-skip-profiling 关闭查询分析功能, 缺省是打开的;
--proxy-fix-bug-25371 修正 mysql的libmysql版本大于5.1.12的一个#25371号bug;
-s,--proxy-lua-script=<file> 指定一个Lua脚本来控制mysql-proxy的运行和设置,这个脚本在每次新建连接和脚本发生修改的的时候将重新调用;
其他选项:
--defaults-file=<file>配置文件,可以把mysql-proxy的参数信息置入一个配置文件里,建议大家用这种配置MySQL Proxy0.8.2,比较方便;
--daemon mysql-proxy以守护进程方式运行;
--pid-file=file 设置mysql-proxy的存储PID文件的路径;
--keepalive try to restart the proxy if it crashed,保持连接启动进程会有2个, 一号进程用来监 视二号进程, 如果二号进程死掉自动重启proxy,这是新版MySQL Proxy的增加的Keepalived功能,它修正了以前MySQL Proxy容易死掉的bug,建议大家开启此功能。
完整的mysql-proxy配置文件如下:
[mysql-proxy]
admin-username=root
admin-password=123456
admin-lua-script=/usr/local/lib/admin.lua
proxy-read-only-backend-addresses=192.168.2.115
proxy-backend-addresses=192.168.2.117
proxy-lua-script=/usr/local/lib/rw-splitting.lua
log-file=/var/log/mysql-proxy.log
log-level=debug
daemon=true
keepalive=true
2.给用户授权
在Master/Slave建立一个测试用户,因为以后客户端发送的SQL都是通过mysql-proxy服务器来转发,所以要确保可以从mysql-proxy服务器上登录MySQL主从库,分别在主和从MySQL机器上执行如下所示:
mysql> grant all privileges on *.* to 'test'@'192.168.2.117' identified by 'test' with grant option;
mysql> grant all privileges on *.* to 'test'@'192.168.2.115' identified by 'test' with grant option;
3.做完此步我们就可以在MySQL Proxy0.8.2上进行测试了,命令如下所示:
/usr/local/mysql-proxy/bin/mysql-proxy -P 192.168.2.112:3306 --defaults-file=/etc/mysql-proxy.cnf
我们监测下MySQL Proxy的日志,有如下字样表示MySQL Proxy已成功启动了(注意之前要成功启动117和115上的mysql程序),如下所示:
2012-03-13 14:05:38: (message) added read-only backend: 192.168.2.115
2012-03-13 16:14:56: (message) proxy-plugin.c.1508: connect(192.168.2.115:3306) failed: Connection refused. Retrying with different backend.
2012-03-14 13:58:23: (message) chassis-unix-daemon.c:136: [angel] we try to keep PID=2399 alive
2012-03-14 13:58:23: (debug) chassis-unix-daemon.c:157: waiting for 2399
2012-03-14 13:58:23: (debug) chassis-unix-daemon.c:121: we are the child: 2399
2012-03-14 13:58:23: (message) mysql-proxy 0.8.2 started
2012-03-14 13:58:23: (debug) max open file-descriptors = 1024
2012-03-14 13:58:23: (message) proxy listening on port 192.168.2.112:3306
2012-03-14 13:58:23: (message) added read/write backend: 192.168.2.117
2012-03-14 13:58:23: (message) added read-only backend: 192.168.2.115
我们多开些MySQL客户端,会发现MySQL Proxy0.8.2很容易的利用Lua脚本实现读写分离功能了,在进行测试前我比较担心的一个问题是:如果主Master因故障停止服务了,MySQL Proxy会不会在从机上面写数据呢?这样会导致主从数据不一,事实上,我在停掉192.168.2.117上的MySQL时发现,MySQL Proxy0.8.2直接不允许写数据了。
三、MySQL Proxy0.8.2测试中遇到的问题。
1.我们可以修改读写分离Lua脚本,让测试更容易,Lua脚本默认最小4个最大8个以上的客户端连接才会实现读写分离(这是因为mysql-proxy会检测客户端连接, 当连接没有超过min_idle_connections预设值时,不会进行读写分离,即查询操作会发生到Master上),现改为最小1个最大2个,我们用vim修改/usr/local/lib/rw-splitting.lua脚本,改动内容如下所示:
if not proxy.global.config.rwsplit then
proxy.global.config.rwsplit = {
min_idle_connections = 1,
max_idle_connections = 2,
is_debug = false
}
end
2.MySQL Proxy0.8.2启动后,我们看的网站页面全是乱码,所以我们要将主从数据库的配置文件my.cnf加进如下代码以避免这个问题:
[mysqld]
skip-character-set-client-handshake
init-connect='SET NAMES utf8'
default-character-set=utf8
3.配置文件的权限问题
建议使用配置文件的形式启动,注意配置文件必须是660权限,否则无法启动。如果有多个Slave的话,proxy-read-only-backend-addresses参数可以配置多个以逗号分隔的IP:Port从库列表。
注意的是,虽然以前的MySQL Proxy的版本存在着这样或那样的问题,但新版的MySQL Proxy0.8.2基本都修正这些Bug了,而且它毕竟是MySQL官方推出的产品,而且相对于Amoeba而言,MySQL Proxy支持事务,我们在生产环境下可以尝试将其用之于代码已固定而且不能更改、的中小型网站。
参考文档:http://database.51cto.com/art/201203/324475.htm
# yum -y install gcc gcc-c++ autoconf mysql-devel libtool pkgconfig ncurses ncurses-devel
wget http://dev.mysql.com/get/Downloads/MySQL-Proxy/mysql-proxy-0.8.2.tar.gz/from/http://mysql.oss.eznetsols.org/
wget http://monkey.org/~provos/libevent-2.0.13-stable.tar.gz
wget http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.12.tar.gz
wget http://ftp.gnome.org/pub/gnome/sources/glib/2.18/glib-2.18.4.tar.gz
wget ftp://ftp.cwru.edu/pub/bash/readline-6.1.tar.gz
wget http://www.lua.org/ftp/lua-5.1.4.tar.gz
2.安装libevent
tar zxvf libevent-2.0.13-stable.tar.gz
cd libevent-2.0.13-stable
./configure --prefix=/usr/local/libevent
make
make install
3.安装libiconv
tar zxvf libiconv-1.12.tar.gz
cd libiconv-1.12
./configure
make && make install
4.安装glib
tar zxvf glib-2.18.4.tar.gz
cd glib-2.18.4
./configure --with-libiconv
make
make install
5.安装readline
tar zxvf readline-6.1.tar.gz
cd readline-6.1
./configure
make
make install
为了让动态链接库为系统所共享,我们这里用ldconfig
ldconfig -v
6.安装lua
tar zxvf lua-5.1.4.tar.gz
cd lua-5.1.4/src
# 64位系统,需在CFLAGS里加上-fPIC ,我们用vim编辑下src/Makefile文件,修改代码如下所示:
vi Makefile
CFLAGS= -O2 -Wall -fPIC $(MYCFLAGS)
#cd ..
#make linux
#make install
7.配置pkg-config 环境变量,命令如下所示:
# cp etc/lua.pc /usr/local/lib/pkgconfig/
# export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
8.安装mysql-proxy
tar zxvf mysql-proxy-0.8.2.tar.gz
cd mysql-proxy-0.8.2
./configure --prefix=/usr/local/mysql-proxy
make
make install
cp lib/rw-splitting.lua /usr/local/mysql-proxy/ #读写分离脚本
cp lib/admin.lua /usr/local/mysql-proxy/lib
二、到这里MySQL-proxy已基本安装完成,接下来就是MySQL Proxy0.8.2的测试和配置了。
MySQL Proxy环境设置说明
Master MySQL服务器:192.168.2.117
Slave MySQL服务器:192.168.192.168.2.115
MySQL Proxy服务器:192.168.2.112
1.mysql-proxy选项说明,大家也可以用mysql-proxy –help-all查看它的帮助选项,命令如下所示:
mysql-proxy --help-all
管理功能选项:
--admin-address=host:port 指定一个mysqo-proxy的管理端口,缺省是4041;
--admin-username=<string> username to allow to log in
--admin-password=<string> password to allow to log in
--admin-lua-script=<filename> script to execute by the admin plugin
代理功能选项:
-P,--proxy-address=<host:port> 是mysql-proxy 服务器端的监听端口,缺省是4040,建议改为3306,方便开发人员写代码。
-r,--proxy-read-only-backend-addresses=<host:port> 只读Slave的地址和端口,缺省为不设置;
-b,--proxy-backend-addresses=<host:port> 远程Master地址和端口,可设置多个做failover和load balance,缺省是127.0.0.1:3306;
--proxy-skip-profiling 关闭查询分析功能, 缺省是打开的;
--proxy-fix-bug-25371 修正 mysql的libmysql版本大于5.1.12的一个#25371号bug;
-s,--proxy-lua-script=<file> 指定一个Lua脚本来控制mysql-proxy的运行和设置,这个脚本在每次新建连接和脚本发生修改的的时候将重新调用;
其他选项:
--defaults-file=<file>配置文件,可以把mysql-proxy的参数信息置入一个配置文件里,建议大家用这种配置MySQL Proxy0.8.2,比较方便;
--daemon mysql-proxy以守护进程方式运行;
--pid-file=file 设置mysql-proxy的存储PID文件的路径;
--keepalive try to restart the proxy if it crashed,保持连接启动进程会有2个, 一号进程用来监 视二号进程, 如果二号进程死掉自动重启proxy,这是新版MySQL Proxy的增加的Keepalived功能,它修正了以前MySQL Proxy容易死掉的bug,建议大家开启此功能。
完整的mysql-proxy配置文件如下:
[mysql-proxy]
admin-username=root
admin-password=123456
admin-lua-script=/usr/local/lib/admin.lua
proxy-read-only-backend-addresses=192.168.2.115
proxy-backend-addresses=192.168.2.117
proxy-lua-script=/usr/local/lib/rw-splitting.lua
log-file=/var/log/mysql-proxy.log
log-level=debug
daemon=true
keepalive=true
2.给用户授权
在Master/Slave建立一个测试用户,因为以后客户端发送的SQL都是通过mysql-proxy服务器来转发,所以要确保可以从mysql-proxy服务器上登录MySQL主从库,分别在主和从MySQL机器上执行如下所示:
mysql> grant all privileges on *.* to 'test'@'192.168.2.117' identified by 'test' with grant option;
mysql> grant all privileges on *.* to 'test'@'192.168.2.115' identified by 'test' with grant option;
3.做完此步我们就可以在MySQL Proxy0.8.2上进行测试了,命令如下所示:
/usr/local/mysql-proxy/bin/mysql-proxy -P 192.168.2.112:3306 --defaults-file=/etc/mysql-proxy.cnf
我们监测下MySQL Proxy的日志,有如下字样表示MySQL Proxy已成功启动了(注意之前要成功启动117和115上的mysql程序),如下所示:
2012-03-13 14:05:38: (message) added read-only backend: 192.168.2.115
2012-03-13 16:14:56: (message) proxy-plugin.c.1508: connect(192.168.2.115:3306) failed: Connection refused. Retrying with different backend.
2012-03-14 13:58:23: (message) chassis-unix-daemon.c:136: [angel] we try to keep PID=2399 alive
2012-03-14 13:58:23: (debug) chassis-unix-daemon.c:157: waiting for 2399
2012-03-14 13:58:23: (debug) chassis-unix-daemon.c:121: we are the child: 2399
2012-03-14 13:58:23: (message) mysql-proxy 0.8.2 started
2012-03-14 13:58:23: (debug) max open file-descriptors = 1024
2012-03-14 13:58:23: (message) proxy listening on port 192.168.2.112:3306
2012-03-14 13:58:23: (message) added read/write backend: 192.168.2.117
2012-03-14 13:58:23: (message) added read-only backend: 192.168.2.115
我们多开些MySQL客户端,会发现MySQL Proxy0.8.2很容易的利用Lua脚本实现读写分离功能了,在进行测试前我比较担心的一个问题是:如果主Master因故障停止服务了,MySQL Proxy会不会在从机上面写数据呢?这样会导致主从数据不一,事实上,我在停掉192.168.2.117上的MySQL时发现,MySQL Proxy0.8.2直接不允许写数据了。
三、MySQL Proxy0.8.2测试中遇到的问题。
1.我们可以修改读写分离Lua脚本,让测试更容易,Lua脚本默认最小4个最大8个以上的客户端连接才会实现读写分离(这是因为mysql-proxy会检测客户端连接, 当连接没有超过min_idle_connections预设值时,不会进行读写分离,即查询操作会发生到Master上),现改为最小1个最大2个,我们用vim修改/usr/local/lib/rw-splitting.lua脚本,改动内容如下所示:
if not proxy.global.config.rwsplit then
proxy.global.config.rwsplit = {
min_idle_connections = 1,
max_idle_connections = 2,
is_debug = false
}
end
2.MySQL Proxy0.8.2启动后,我们看的网站页面全是乱码,所以我们要将主从数据库的配置文件my.cnf加进如下代码以避免这个问题:
[mysqld]
skip-character-set-client-handshake
init-connect='SET NAMES utf8'
default-character-set=utf8
3.配置文件的权限问题
建议使用配置文件的形式启动,注意配置文件必须是660权限,否则无法启动。如果有多个Slave的话,proxy-read-only-backend-addresses参数可以配置多个以逗号分隔的IP:Port从库列表。
注意的是,虽然以前的MySQL Proxy的版本存在着这样或那样的问题,但新版的MySQL Proxy0.8.2基本都修正这些Bug了,而且它毕竟是MySQL官方推出的产品,而且相对于Amoeba而言,MySQL Proxy支持事务,我们在生产环境下可以尝试将其用之于代码已固定而且不能更改、的中小型网站。
参考文档:http://database.51cto.com/art/201203/324475.htm