4.MySQL Proxy
4.1 MySQL读写分离简介MySQL-Proxy,是处在你的MySQL数据库客户和服务端之间的程序,它还支持嵌入性脚本语言Lua。这个代理可以用来分析、监控和变换(transform) 通信数据。
MySQL Proxy最强大的一项功能是实现“读 写分离(Read/Write Splitting)”。基本的原理是让主数据库处理事务性查询,而从数据库处理SELECT查询。数据库复制被用来把事务性查询导致的变更同步到集群中的从数据库。
4.2 MySQL环境部署
实验环境:
实验环境是沿用第三章实验基础上的:
主机名
IP地址
作用
MySQL-Master
192.168.140.128
MySQL主库服务器
MySQL-Slave
192.168.140.129
MySQL 从库服务器
MySQL-Proxy
192.168.140.130
MySQL 代理服务器
4.2.1 部署安装环境
# rpm -q libevent glib2 pkgconfig libtool mysql-devel
# cd /usr/local/src
# wget http://www.lua.org/ftp/lua-5.1.4.tar.gz
#
wget http://gd.tuwien.ac.at/db/mysql/Downloads/MySQL-Proxy/mysql-proxy-0.6.0.tar.gz
# wget http://www.monkey.org/~provos/libevent-1.4.13-stable.tar.gz
4.2.2 安装lua
# tar zxvf lua-5.1.4.tar.gz
# cd lua-5.1.4
# vi Makefile
修改:
INSTALL_TOP= /usr/local/lua
# make && make linux && make install
# export LUA_CFLAGS="-I/usr/local/lua/include" LUA_LIBS="-L/usr/local/lua/lib -llua -ldl" LDFLAGS="-L/usr/local/libevent/lib -lm"
# export CPPFLAGS="-I/usr/local/libevent/include"
# export CFLAGS="-I/usr/local/libevent/include"
4.2.3 安装libevent
# tar zxvf libevent-1.4.13-stable.tar.gz
# cd libevent-1.4.13-stable
# ./configure --prefix=/usr/local/libevent
# make && make install
4.2.4 安装MySQL
# tar zxvf mysql-5.1.47.tar.gz
# cd mysql-5.1.47
# ./configure --prefix=/usr/local/mysql --without-server
4.2.5 设置环境变量
# export LUA_CFLAGS="-I/usr/local/lua/include" LUA_LIBS="-L/usr/local/lua/lib -llua -ldl" LDFLAGS="-L/usr/local/libevent/lib -lm"
# export CPPFLAGS="-I/usr/local/libevent/include"
# export CFLAGS="-I/usr/local/libevent/include"
4.2.6 安装MySQL-Proxy
注意:如果你安装更高版本的mysql-proxy需要升级你的glib。
# tar zxvf mysql-proxy-0.6.0.tar.gz
# cd mysql-proxy-0.6.0
# ./configure --prefix=/usr/local/mysql-proxy --with-mysql=/usr/local/mysql --with-lua
# make && make install
4.3 MySQL-Proxy配置
# /usr/local/mysql-proxy/sbin/mysql-proxy --help-all
Usage:
mysql-proxy - MySQL Proxy
Help Options:
-?, --help
--help-all
--help-admin
--help-proxy
admin module
--admin-address=#管理主机监听地址和端口,默认是4041
proxy-module
-proxy-address= #代理主机监听地址和端口,默认是4040
--proxy-read-only-backend-addresses= #只读连接时,代理服务器的监听地址及端口。默认4042
--proxy-backend-addresses= #连接后端真实服务器时的地址及监听端口,默认是3306
--proxy-skip-profiling
--proxy-fix-bug-25371
--proxy-lua-script= 连接真实服务器的地址及监听端口,默认是3306
--no-proxy
Application Options:
-V, --version
--daemon
--pid-file=
4.4 MySQL Proxy 启动
4.4.1 命令行启动
# /usr/local/mysql-proxy/sbin/mysql-proxy \
> --proxy-read-only-backend-addresses=192.168.140.129:3306 \
> --proxy-backend-addresses=192.168.140.128:3306 \
> --proxy-lua-script=/usr/local/mysql-proxy/share/mysql-proxy/rw-splitting.lua &
检测是否开始监听:
# netstat -ntlp | grep mysql
tcp 0 0 0.0.0.0:4040 0.0.0.0:* LISTEN 28739/mysql-proxy
tcp 0 0 0.0.0.0:4041 0.0.0.0:* LISTEN 28739/mysql-proxy
4.4.2 脚本启动
# vi /etc/init.d/mysql-proxy
#!/bin/bash
PRODIR=/usr/local/mysql-proxy
LUA_PATH=$PRODIR/share/mysql-proxy
start(){
$PRODIR/sbin/mysql-proxy --proxy-read-only-backend-addresses=192.168.140.129:3306 --proxy-backend-addresses=192.168.140.128:3306 --proxy-lua-script=$LUA_PATH/rw-splitting.lua >>$PRODIR/mysql-proxy.log &
}
stop(){
kill $(pidof mysql-proxy)
if [ $? -ne 0 ];then
kill -9 $(pidof mysql-proxy)
fi
}
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
stop
start
;;
*)
echo $"Usage: $0 {start|stop|restart}"
Esac
# chmod +x /etc/init.d/mysql-proxy
# /etc/init.d/mysql-proxy start
4.5 MySQL Proxy 测试
4.5.1 测试环境部署
在MySQL-Master上创建测试数据库和用户。
mysql> create database unixhot;
mysql> GRANT ALL PRIVILEGES ON unixhot.* to proxytest@'%' identified by 'unixhot';
4.5.2 连接测试
# mysql -h 192.168.140.130 -P 4040 -u proxytest -p
输入密码即可登录。
注意:在这里只做简单测试,具体请根据具体应用进行测试。由于目前MySQL Proxy技术还不够成熟,如果想在生产环境部署,请慎用。
页:
[1]