廢話不說!
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