Mysql Proxy Lua主從搭建讀寫分離全過程
Mysql Proxy Lua主從搭建讀寫分離全過程是本文要介紹的內容,主要是來了解Mysql Proxy的讀寫分離的過程,很詳細的講解了全過程,具體內容我們來看詳細內容。
下載 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 安裝測試完成。
小結:Mysql Proxy Lua主從搭建讀寫分離全過程的內容介紹完了,希望通過本文的學習能對你有所幫助!