張映 發表於 2010-03-03php
分類目錄: mysqlmysql
一,mysql proxy是什麼,幹什麼用的linux
MySQL Proxy就是這麼一箇中間層代理,簡單的說,MySQL Proxy就是一個鏈接池,負責將前臺應用的鏈接請求轉發給後臺的數據庫,而且經過使用lua腳本,能夠實現複雜的鏈接控制和過濾,從而實現讀寫分離和負 載平衡。對於應用來講,MySQL Proxy是徹底透明的,應用則只須要鏈接到MySQL Proxy的監聽端口便可。固然,這樣proxy機器可能成爲單點失效,但徹底可使用多個proxy機器作爲冗餘,在應用服務器的鏈接池配置中配置到多 個proxy的鏈接參數便可。程序員
mysql replication 數據同步web
上圖中,web到底鏈接那個數據庫,這個要程序員本身寫的代友來決定的,如今是二臺mysql服務器,若是有多臺或者是N臺呢,靠用php代碼來管理鏈接數據庫,就很鬱悶了。sql
mysql proxy 圖示數據庫
mysql proxy就很好解決了這個問題,對於程序端而言,web端的請求,只要到mysql proxy的鏈接池就OK了,剩下的工做就交給mysql proxy了。對於程序代碼管理來講就簡單多了。我的以爲這一點最值得借用的了。centos
二,mysql proxy的安裝服務器
我在安裝mysql proxy的時候,提示要安裝lua,其餘的沒有什麼提示,不過我在網上看到好多要裝這個,那個。eclipse
那些東西,我都已經裝過了,裝系統的時候,就自帶的裝了。
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的數據庫中。