為什麼要架設讀寫分離,這裡不做多餘的說明,想了解具體原理,請百度或者參考其他帖子。在這裡只做大概的配置說明,測試中使用三臺伺服器
192.168.136.142 主伺服器
192.168.136.143 從伺服器
192.168.136.144 中間伺服器
解壓安裝的方式安裝
https://downloads.mysql.com/archives/proxy/,安裝Mysql proxy 需要確保伺服器安裝過lua,因為Mysql依賴於lua5.1以上版本,rpm -q lua,看看是否安裝,還依賴libevent,這裡我選擇的還是0.83版本,比較穩定。mysql-proxy-0.8.3-linux-glibc2.3-x86-64bit.tar.gz
在中間伺服器 下載完成之後,解壓並移動目錄
tar -zxvf mysql-proxy-0.8.3-linux-glibc2.3-x86-64bit
mv ./mysql-proxy-0.8.3-linux-glibc2.3-x86-64bit /usr/local/mysql-proxy/
進入/usr/local/mysql-proxy目錄,建立指令碼存放目錄和日誌目錄,並把解壓目錄後的相關檔案拷貝到對應目錄。
cd /usr/local/mysql-proxy
mkdir lua #建立指令碼存放目錄
mkdir logs #建立日誌目錄
cp share/doc/mysql-proxy/rw-splitting.lua ./lua #複製讀寫分離配置檔案
cp share/doc/mysql-proxy/admin-sql.lua ./lua #複製管理指令碼
然後在中間伺服器配置一個mysql-proxy啟動配置檔案,並賦予執行許可權,chmod 660 /etc/mysql-porxy.cnf
vi /etc/mysql-proxy.cnf #建立配置檔案
//內容在下
[mysql-proxy]
user=root #執行mysql-proxy使用者
admin-username=pro #主從mysql共有的使用者
admin-password=pro123 #使用者的密碼
proxy-address=192.168.136.144:4040 #mysql-proxy執行ip和埠,不加埠,預設4040
proxy-read-only-backend-addresses=192.168.136.143 #指定後端從slave讀取資料
proxy-backend-addresses=192.168.136.142 #指定後端主master寫入資料
proxy-lua-script=/usr/local/mysql-proxy/lua/rw-splitting.lua #指定讀寫分離配置檔案位置
admin-lua-script=/usr/local/mysql-proxy/lua/admin-sql.lua #指定管理指令碼
log-file=/usr/local/mysql-proxy/logs/mysql-proxy.log #日誌位置
log-level=info #定義log日誌級別,由高到低分別有(error|warning|info|message|debug),除錯的時候建議debug
daemon=true #以守護程式方式執行
keepalive=true #mysql-proxy崩潰時,嘗試重啟
這裡編輯一個指令碼,用於快速啟動mysql-proxy,並賦予執行許可權
vim /etc/profile.d/mysql-proxy.sh
//內容在下
export PATH=$PATH:/usr/local/mysql-proxy/bin/
chmod 660 /etc/mysql-porxy.cnf
執行以下命令檢視幫助引數
修改讀寫分離配置檔案
vim /usr/local/mysql-proxy/lua/rw-splitting.lua
if not proxy.global.config.rwsplit then
proxy.global.config.rwsplit = {
min_idle_connections = 1, #預設超過4個連線數時,才開始讀寫分離,改為1
max_idle_connections = 1, #預設8,改為1
is_debug = false
}
end
啟動服務
mysql-proxy --defaults-file=/etc/mysql-proxy.cnf
檢視和關閉服務命令如下
netstat -tupln | grep 4040 #已經啟動
killall -9 mysql-proxy #關閉mysql-proxy使用
接下來還需要在主伺服器授權,在主伺服器建立proxy使用者用於mysql-proxy使用,從伺服器也會同步這個操作
mysql> grant all on *.* to 'pro'@'192.168.136.144' identified by 'pro123';
接下來使用客戶端連線中間伺服器,並測試讀寫
mysql -u pro -h 192.168.136.144 -P 4040 -p pro123
測試讀寫成功了,這裡不做說明了