關於MySQL資料庫-proxy實現讀寫分離的方法

MySQL-proxy實現讀寫分離

前提:準備3臺安裝mysql的centos6,其中兩臺已經實現mysql集群主從復制

1、安裝mysql-proxy

1.1官網下載mysql-proxy-0.8.5-linux-el6-x86-64bit.tar.gz並上傳到centos伺服器的/usr/local目錄下

1.2 解壓mysql-proxy

cd /usr/local

tar -zxvf mysql-proxy-0.8.5-linux-el6-x86-64bit.tar.gz

修改解壓後的文件名(主要為瞭方便)

mv mysql-proxy-0.8.5-linux-el6-x86-64bit mysql-proxy

創建用戶組

groupadd mysql-proxy

創建用戶

useradd -g mysql-proxy mysql-proxy

cd /mysql-proxy

更改目錄屬主和屬組,“.”表示當前目錄

chown -R root:mysql-proxy .

配置mysql-proxy環境變量

vi /etc/profile

在最後配置export PATH=$PATH:/usr/local/mysql-proxy/bin

讓配置文件生效

source /etc/profile

測試是否安裝成功

mysql-proxy –help-all,若有出現mysql-proxy的相關文檔信息則表示成功

2、使用命令啟動mysql-proxy,參數信息在往下第4步驟配置文件啟動時會說明

mysql-proxy –daemon –log-level=debug –log-file=/var/log/mysql-proxy.log –plugins="proxy" –proxy-backend-addresses="192.168.88.129:3306" –proxy-read-only-backend-addresses="192.168.88.131:3306"

查看啟動日志

[root@localhost mysql-proxy]# tail /var/log/mysql-proxy.log

2017-12-28 21:53:47: (critical) plugin proxy 0.8.5 started

2017-12-28 21:53:47: (debug) max open file-descriptors = 1024

2017-12-28 21:53:47: (message) proxy listening on port :4040

2017-12-28 21:53:47: (message) added read/write backend: 192.168.88.129:3306

2017-12-28 21:53:47: (message) added read-only backend: 192.168.88.131:3306

查看監聽的端口,4040為mysql-proxy默認端口,有信息則表示已啟動

netstat -ntulp | grep :4040

關閉服務

killall -9 mysql-proxy

3、現在我們需要在master伺服器中創建一個遠程登入的mysql賬號,由於master和slave伺服器已經同步,因此在slave伺服器都會又這個用戶

創建用戶:CREATE USER 'synuser'@'%' IDENTIFIED BY '123456';

授權:GRANT ALL PRIVILEGES ON *.* TO 'synuser'@'%';

在slave伺服器測試登陸mysql-proxy服務

mysql -usynuser -p123456 -h192.168.1.112 –port=4040

4、實現完以上安裝和測試後,接下來開始實現讀寫分離,mysql-proxy服務本身是沒有讀寫分離功能的,需要依賴lua腳本實現

在proxy伺服器機器上關閉服務

killall -9 mysql-proxy

檢查是否關閉

netstat -ntlup | grep 4040

關閉後開始配置mysql-proxy

cd /usr/local/mysql-proxy

創建腳本存放目錄

mkdir lua

將管理腳本和讀寫分離配置文件復制到lua目錄

cp share/doc/mysql-proxy/rw-splitting.lua ./lua #復制讀寫分離配置文件

cp share/doc/mysql-proxy/admin-sql.lua ./lua #復制管理腳本

修改rw-splitting.lua配置文件(實際配置時將註釋刪掉)

vi /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

}

配置啟動文件,(實際配置時將註釋刪掉)

vi /etc/mysql-proxy.cnf

[mysql-proxy]

user=root #運行mysql-proxy用戶,好像沒什麼作用

admin-username=synuser #主從mysql共有的用戶

admin-password=123456 #用戶的密碼

proxy-address=192.168.88.132:4040 #mysql-proxy運行ip和端口,不加端口,默認4040

proxy-read-only-backend-addresses=192.168.88.131 #指定後端從slave讀取數據

proxy-backend-addresses=192.168.88.129 #指定後端主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=/var/log/mysql-proxy.log #日志位置

log-level=info #設定log日志級別,由高到低分別有(error|warning|info|message|debug)

daemon=true #以守護進程方式運行

keepalive=true #mysql-proxy崩潰時,嘗試重啟

#保存退出!

chmod 660 /etc/mysql-porxy.cnf

5、配置完之後就可以使用mysql-proxy –defaults-file=/etc/mysql-proxy.cnf 啟動mysql-proxy

6、測試

在master伺服器登陸synuser,使用 test資料庫創建tb_test表

在slave伺服器登陸synuser

然後關閉slave伺服器的slave服務

在proxy伺服器登陸mysql -usynuser -p123456 -h192.168.88.132 –port=4040

use test;

insert into tb_test value(……)

在在master伺服器查詢tb_test:select * from tb_test,發現表中有數據,在在slave伺服器查詢tb_test:select * from tb_test,發現表中無數據,證明寫操作隻在master伺服器進行

在在proxy伺服器查詢tb_test:select * from tb_test,發現表中沒有數據,證明讀操作在slave伺服器上進行

You May Also Like