linux mysql proxy 的安装,配置,以及读写分离

张映 发表于 2010-03-03

分类目录: mysql

标签:, , ,

一,mysql proxy是什么,干什么用的

MySQL Proxy就是这么一个中间层代理,简单的说,MySQL Proxy就是一个连接池,负责将前台应用的连接请求转发给后台的数据库,并且通过使用lua脚本,可以实现复杂的连接控制和过滤,从而实现读写分离和负 载平衡。对于应用来说,MySQL Proxy是完全透明的,应用则只需要连接到MySQL Proxy的监听端口即可。当然,这样proxy机器可能成为单点失效,但完全可以使用多个proxy机器做为冗余,在应用服务器的连接池配置中配置到多 个proxy的连接参数即可。

mysql replication 数据同步

mysql replication 数据同步

上图中,web到底连接那个数据库,这个要程序员自己写的代友来决定的,现在是二台mysql服务器,如果有多台或者是N台呢,靠用php代码来管理连接数据库,就很郁闷了。

mysql proxy 图示

mysql proxy 图示

mysql proxy就很好解决了这个问题,对于程序端而言,web端的请求,只要到mysql proxy的连接池就OK了,剩下的工作就交给mysql proxy了。对于程序代码管理来说就简单多了。个人觉得这一点最值得借用的了。

二,mysql proxy的安装

我在安装mysql proxy的时候,提示要安装lua,其他的没有什么提示,不过我在网上看到好多要装这个,那个。

那些东西,我都已经装过了,装系统的时候,就自带的装了。

a,安装pkg-config

Ubuntu安装: apt-get install pkg-config

centos安装:yum install pkg-config

archlinux安装:pacman -S pkg-config

如果你要手动装,自己下

b,安装libevent

c,安装glib

d,安装lua

怎么安装同a

e,安装mysql在这儿不多说了,一搜网上都是

f,二进制包mysql proxy

wget http://mysql.cdpa.nsysu.edu.tw/Downloads/MySQL-Proxy/mysql-proxy-0.6.0-linux-rhas4-x86.tar.gz

#解压到mysql下面,因为这个东西可以看成是mysql的一个插件了。

tar zxvf mysql-proxy-0.6.0-linux-rhas4-x86.tar.gz -C /usr/local/mysql

mv /usr/local/mysql/mysql-proxy-0.6.0-linux-rhas4-x86  /usr/local/mysql/mysql_proxy

cd /usr/local/mysql/mysql_proxy/sbin/

echo $PATH
/usr/local/mmseg/bin:/usr/local/mmseg/bin:/bin:/usr/bin:/sbin:/usr/sbin:/usr/share/eclipse:/usr/bin/perlbin/site:/usr/bin/perlbin/vendor:/usr/bin/perlbin/core

cp mysql-proxy /usr/sbin               #加到环境变成里面去

查看一下是否安装成功

[root@BlackGhost sbin]#  mysql-proxy --help
Usage:
mysql-proxy [OPTION...] - MySQL Proxy

Help Options:
-?, --help                                          Show help options
--help-all                                          Show all help options
--help-admin                                        Show options for the admin-module
--help-proxy                                        Show options for the proxy-module

Application Options:
-V, --version                                       Show version
--daemon                                            Start in daemon-mode
--pid-file=<file>                                   PID file in case we are started as daemon

三,启动mysql proxy

#注意:LUA_PATH="/usr/local/mysql/mysql-proxy/share/mysql-proxy/*.lua"

启动前,增加一下LUA的环境变量,不然用mysql proxy启动mysql时,会报找不到lua,会报以下错误

[root@BlackGhost share]# mysql -u root -h 127.0.0.1 -P 8888
(lua-error) [/usr/local/mysql/mysql_proxy/share/mysql-proxy/rw-splitting.lua]
...mysql/mysql_proxy/share/mysql-proxy/rw-splitting.lua:29: module 'proxy.commands' not found:
no field package.preload['proxy.commands']
no file './proxy/commands.lua'
no file '/data1/mysqldev/mysql-proxy/inst/lua/share/lua/5.1/proxy/commands.lua'
no file '/data1/mysqldev/mysql-proxy/inst/lua/share/lua/5.1/proxy/commands/init.lua'
no file '/data1/mysqldev/mysql-proxy/inst/lua/lib/lua/5.1/proxy/commands.lua'

mysql-proxy --proxy-address=127.0.0.1:8888 --proxy-read-only-backend-addresses=192.168.1.75:3306 --proxy-backend-addresses=192.168.1.91:3306 --proxy-lua-script=/usr/local/mysql/mysql_proxy/share/mysql-proxy/rw-splitting.lua &

[root@BlackGhost sbin]# ps -e|grep mysql-proxy

15804 pts/1    00:00:00 mysql-proxy

四,测试mysql proxy

1,在192.168.1.75的test数据库中,建一个test表,结构一样

2,在192.168.1.91的test数据库中,建一个test表,结构一样

mysql -u root -h 127.0.0.1 -P 8888            #利用连接池,进入数据库

use test

INSERT INTO `test` ( `name`, `sex`) VALUES ('tank', 1)

你会发现这条数据会出现在192.168.1.91的mysql的数据库中。



转载请注明
作者:海底苍鹰
地址:http://blog.51yip.com/mysql/399.html

10 条评论

  1. yushyu114 留言

    那请问下用PHP程序的话怎么利用这个mysql连接池呢?

  2. 张映 留言

    以文章中的例子来分析一下,proxy监听的端口是8888,连接池中有二个数据库,一个是192.168.1.75:3306,另一个是192.168.1.91:3306,如果不用连接池连接数据库,$dsn = 'mysql:dbname=test;host=192.168.1.75;port=3306'; 另一个也一样。
    如果用连接连接数据库呢, $dsn = 'mysql:dbname=test;host=127.0.0.1;port=8888';

  3. quweidou 留言

    请问,在WINDOWS2003下,如何配置/安装mysql proxy,我已下载了mysql-proxy-0.8.1-win32-x86,谢谢!!

  4. 张映 留言

    windows下面,没配置过mysql proxy

  5. FI 留言

    请问:
    大侠在实际生产环境中用过MySQL Proxy么?稳定性和性能怎样?
    求指教。

  6. 张映 留言

    在生产环境中没有用过,个人觉得proxy效率不行。你可以用mysql replication,或者其他的同步工具。

  7. wb 留言

    请问下你们读写分离咋做的,切数据源?

  8. 张映 留言

    读写分离,写数据到一台mysql服务器,读从别一台。二台之间进行数据同步。不明白你说的切数据源是什么意思。

  9. FI 留言

    最近在摸索 DB Proxy,欢迎分享和交流
    QQ群:197763196
    Mysql Proxy, SQL Relay, Ameoba 等 DB Proxy 交流

  10. KSaint 留言

    你好,请问mysql proxy这个工具可以拦截php网站与mysql交互的sql语句不让mysql执行sql语句吗,是否要结合lua编程实现呢