【系統環境】
ubuntu12.04 64bit
【步驟】
下載mysql-proxy
ftp://mirror.switch.ch/mirror/mysql/Downloads/MySQL-Proxy/mysql-proxy-0.8.4.tar.gz
安裝依賴包
apt-get install libevent-dev
apt-get install lua5.1-dev
apt-get install libglib2.0-dev
解壓mysql-proxy-0.8.4.tar.gz得到mysql-proxy-0.8.4,進入目錄
./configure --prefix=/usr/local/mysql-proxy --with-mysql=/usr/local/mysql/
注意編譯要依賴mysql,所以應該先安裝mysql,否則編譯不通過。
make && make install
接下來把需要用到的lua腳本拷貝到安裝目錄中
cp lib/rw-splitting.lua /usr/local/mysql-proxy/
修改rw-splitting.lua內容,找到如下
-- connection pool
if not proxy.global.config.rwsplit then
proxy.global.config.rwsplit = {
min_idle_connections = 4,
max_idle_connections = 8,
is_debug = false
}
end
把4和8都換成1,因爲只有當客戶端連接大於配置的4時候,纔會啓用讀寫分離,否則都從master讀寫,換成1後,客戶端多起幾個連接,多查幾次就發現讀寫分離起作用了。
cp lib/admin.lua
/usr/local/mysql-proxy/
在安裝目錄中新建 /usr/local/mysql-proxy/mysql-proxy.cnf 配置文件,內容如下
[mysql-proxy]
admin-username = test
admin-password = mima
keepalive=true
proxy-backend-addresses = 192.168.1.101:3306
proxy-read-only-backend-addresses = 192.168.1.93:3306
proxy-lua-script = /usr/local/mysql-proxy/rw-splitting.lua
admin-lua-script = /usr/local/mysql-proxy/admin.lua
log-file = /data/log/mysql-proxy.log
log-level = debug
admin-username
訪問proxy時候用到的用戶名,這個要求後端所有的db都用同一套用戶名密碼才能訪問。
admin-password 密碼
keepalive
找個參數很有用,保持mysql-proxy斷線重連
proxy-backend-addresses
主db(master)地址,可讀可寫
proxy-read-only-backend-addresses
從db(slave)地址,只讀
proxy-lua-script
執行讀寫分離的lua腳本地址
admin-lua-script
驗證用戶名密碼的腳本
log-file
日誌地址
log-level
日誌級別,debug表示調試
啓動
/usr/local/mysql-proxy/bin/mysql-proxy
--defaults-file=/usr/local/mysql-proxy/mysql-proxy.cnf&
測試
mysql -utest -pmima -P4040
這裏設置端口爲4040,是因爲proxy默認端口是4040
連接上後,可以測試sql命令了。
【讀寫分離】
爲了看到讀寫分離效果,如果原本主從db之間有replication同步,需要關掉,否則在master修改後立刻會同步到slave,這樣就看不到兩個db不同的差異了,讀的時候不知道從哪個db讀的。
確認同步已經關閉,客戶端多建立幾條連接,這樣一開始默認連接的是master,後來的連接查詢就會轉到slave。試着修改一個數據庫表的值,然後查詢該值,多查幾次會發現你修改過的值沒有修改,那是因爲已經讀取了從db。