mysql-proxy主從搭建讀寫分離全過程

 

廢話不說!

 

Mysql-proxy是什麼,大家都知道,不知道的就別往下看了...

 

 

首先搭建 mysql 主從數據庫,參考: http://blog.csdn.net/swengineer/archive/2011/03/11/6239711.aspx

 

下載 mysql-proxy 最新版,本文撰寫時最新版本爲 MySQL Proxy 0.8.1 alpha

 

安裝 mysql-proxy 步驟如下:

 

解壓 mysql-proxy-0.8.1-linux-glibc2.3-x86-32bit.gz

tar zxvf mysql-proxy-0.8.1-linux-glibc2.3-x86-32bit.gz

cp -R mysql-proxy-0.8.1-linux-glibc2.3-x86-32bit /usr/local/proxy-mysql

 

新建或編輯 /etc/mysql-proxy.cnf 文件,添加以下內容 ( 具體參數根據實際情況修改 )

vi /etc/mysql-proxy.cnf

[mysql-proxy]

admin-username = zhangdongyu

admin-password = 123123

daemon = true

keepalive = true

proxy-backend-addresses = 192.168.0.88:3306

proxy-read-only-backend-addresses = 192.168.0.88:3307

proxy-lua-script = /usr/local/proxy-mysql/share/doc/mysql-proxy/rw-splitting.lua

admin-lua-script = /usr/local/proxy-mysql/share/doc/mysql-proxy/admin-sql.lua

log-file = /usr/local/proxy-mysql/cn.log

log-level = debug

 

主要參數註解:

proxy-backend-addresses                    mysql 主庫(寫)地址

proxy-read-only-backend-addresses     mysql 從庫(讀)地址

proxy-lua-script                                 讀寫分離腳本

admin-lua-script                                 admin 腳本

admin-username                                 數據庫用戶名(主從上都需建立相同用戶)

admin-password                                 數據庫密碼

daemon                                             daemon 進程運行

keepalive                                           保持連接(啓動進程會有 2 個,一號進程用來監視二號進行,如果二號進程死掉自動重建,此參數在舊版本中無法使用)

 

編輯 profile/.bash_profile 腳本

vi /etc/profile( 或者 .bash_profile)

LUA_PATH="/usr/local/proxy-mysql/share/doc/mysql-proxy/?.lua"

export LUA_PATH

export PATH=$PATH:/usr/local/proxy-mysql/bin

:wq

source /etc/profile

 

爲方便建立建立 mysql-proxy.sh 腳本

#!/bin/bash

mode=$1

if [ -z "$mode" ] ; then

mode="start"

fi

case $mode in

start)

mysql-proxy --defaults-file=/etc/mysql-proxy.cnf>/usr/local/proxy-mysql/cn.log &

;;

stop)

killall -9 mysql-proxy

;;

restart)

if $0 stop ; then

$0 start

else

echo  "Restart failed!"

exit 1

fi

;;

esac

exit 0

 

啓動 mysql-proxy

sh 腳本

啓動: ./mysql-proxy.sh  ./mysql-proxy.sh start

 

啓動日誌

 

 

 

 

重啓: ./mysql-proxy.sh restart

停止: ./mysql-proxy.sh stop

 

 

測試:

爲達到測試效果,修改 admin-sql.lua 腳本以下兩行

vi /usr/local/proxy-mysql/share/doc/mysql-proxy/rw-splitting.lua

if not proxy.global.config.rwsplit then

        proxy.global.config.rwsplit = {

                min_idle_connections = 1,   # 修改最小連接爲 1

                max_idle_connections = 2,   # 修改最大連接爲 2

                is_debug = true            #debug true

        }

end

重啓 mysql-proxy 代理

開啓兩個終端分別連接代理:

ONE ./mysql -h192.168.0.88 -uzhangdongyu -p123123 -P4040

TWO ./mysql -h192.168.0.88 -uzhangdongyu -p123123 -P4040

可看到連接成功信息:

 

 

 

操作 ONE 客戶端:

執行 select 語句觀察數據庫 log 文件

select * from z_member_info;

觀察主從庫日誌文件,發現查詢發生在主庫?

主庫: 192.168.0.88:3306 日誌文件: tail -f /usr/local/mysql/localstate/mysqlexecute.log

 

 

 

 

這是因爲 mysql-proxy 代理會檢測客戶端連接,當連接沒有超過 min_idle_connections 預設值時,不會進行讀寫分離,即查詢操作會發生到主庫上。

 

操作 TWO 客戶端:

執行 select 語句觀察數據庫 log 文件

select * from z_member_info;

觀察主從庫日誌文件,發現主庫沒有任何記錄,查詢日誌記錄在從庫。

從庫: 192.168.0.88:3306 日誌文件: tail -f /usr/local/mysql3307/localstate/mysqlexecute.log

 

 

 

操作兩個終端進行 insert 操作,會發現寫操作始終被主庫( 3306 )日誌文件記錄。

 

 

 

至此 mysql-proxy 安裝測試完成。

注:生產環境一定要根據實際情況配置相關文件,至於 lua 文件強烈推薦讀者自行,目前正在研究 lua 文件的優化與定製,不久會發上來。

版權所有:Robot_G(swengineer)  歡迎轉載http://blog.csdn.net/swengineer/archive/2011/03/14/6248680.aspx

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章