1,檢查必須安裝包mysql
Mysql Proxy安裝以前有先決條件,以下:
• libevent 1.x 或更高
• glib2 2.6.0 或更高
• lua 5.1.x 或更高
• pkg-config
• libtool 1.5 或更高
• MySQL 5.0.x 或更高的開發庫
先yum安裝必須的庫,同時解決pkg-config、libtool和Mysql開發庫,因爲mysql-proxy實際並不須要在本機上運行mysql實例,因此用yum安裝。
yum -y install gcc gcc-c++ autoconf mysql-devel libtool pkgconfig ncurses ncurses-devellinux
lua安裝5.1.4版本,安裝以前須要先安裝readline 6.1,否則會報錯缺乏頭文件:
readline 6.1下載:
ftp://ftp.cwru.edu/pub/bash/readline-6.1.tar.gz
lua 5.1.4下載:
http://www.lua.org/ftp/lua-5.1.4.tar.gz c++
運行腳本:
# tar xvf readline-6.1.tar.gz
# cd readline-6.1
# ./configure
# make && make install
#應用ldconfig –v
# ldconfig –vsql
注:若是安裝出錯 給提示不存在的文件讀寫權限便可。vim
# lua
# tar xvf lua-5.1.4.tar.gz
# cd lua-5.1.4
# 64位系統,需在CFLAGS里加上-fPIC
# vim src/Makefile
CFLAGS= -O2 -Wall -fPIC $(MYCFLAGS)
# make linux
# make installbash
# pkg-config 環境變量
# cp etc/lua.pc /usr/local/lib/pkgconfig/
# export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig 服務器
以上操做完成了先決條件的安裝,接下來是Mysql Proxy安裝(官網下載最新),下載完後運行:
# tar xvf mysql-proxy-0.8.4.tar.gz
# cd mysql-proxy-0.8.4
# ./configure
# make && make install測試
(編譯安裝mysql的指定--with-mysql="PATH" 安裝路徑指定--prefix="")lua
# cp lib/rw-splitting.lua /usr/local/lib/
# cp lib/admin.lua /usr/local/lib/spa
到這裏MySQL-proxy已基本安裝完成,接下來,測試:
Master服務器: 192.168.0.230
Slave服務器: 192.168.0.231
Proxy服務器: 192.168.0.230
注:--暫不進行同步。僅測試讀寫分離。mysql-proxy啓動
1) 修改讀寫分離lua腳本
默認最小4個最大8個以上的客戶端鏈接纔會實現讀寫分離, 現改成最小1個最大2個:
# vi +40 /usr/local/lib/rw-splitting.lua
------------------------------------------------------
-- connection pool
if not proxy.global.config.rwsplit then
proxy.global.config.rwsplit = {
min_idle_connections = 1,
max_idle_connections = 2,
is_debug = true
}
end
------------------------------------------------------
這是由於mysql-proxy會檢測客戶端鏈接, 當鏈接沒有超過min_idle_connections預設值時, 不會進行讀寫分離, 即查詢操做會發生到Master上.
2) 啓動mysql-proxy
建議使用配置文件的形式啓動, 注意配置文件必須是660權限, 不然沒法啓動. 若是有多個Slave的話, proxy-read-only-backend-addresses參數能夠配置多個以逗號分隔的IP:Port從庫列表.
# killall mysql-proxy
# vi /etc/mysql-proxy.cnf[mysql-proxy]
admin-username=***
admin-password=***
admin-lua-script=/usr/local/lib/admin.lua
proxy-backend-addresses=192.168.0.230:3306
proxy-read-only-backend-addresses=192.168.0.231:3306
proxy-lua-script=/usr/local/lib/rw-splitting.lua
log-file=/var/log/mysql-proxy.log
log-level=debug
daemon=true
keepalive=true
# chmod 660 /etc/mysql-proxy.cnf
# mysql-proxy --defaults-file=/etc/mysql-proxy.cnf
# ps -ef | grep mysql-proxy | grep -v grep
root 1869 1 0 18:16 ? 00:00:00 /usr/local/mysql-proxy/libexec/mysql-proxy --defaults-file=/etc/mysql-proxy.cnf
root 1870 1869 0 18:16 ? 00:00:00 /usr/local/mysql-proxy/libexec/mysql-proxy --defaults-file=/etc/mysql-proxy.cnf
鏈接Proxy端口, 插入數據
# mysql -uu_test –pu_test -h192.168.0.230 -P4040 -Ddb_test
mysql> insert into db_test.t_test values ('testB');
mysql> select * from db_test.t_test;
+-------+
| col |
+-------+
| testA |
| testB |
+-------+
3) 多開幾個客戶端, 鏈接Proxy端口, 查詢數據
# mysql -uu_test –pu_test -h192.168.0.230 -P4040 -Ddb_test
mysql> select * from db_test.t_test;
+-------+
| col |
+-------+
| testA |
若是查詢不到上步新插入的數據, 說明鏈接到了Slave, 讀寫分離成功.
發現insert操做成功, 可是select不出剛插入的數據, 說明同一線程也讀寫分離成功. 從日誌中能夠驗證:# tail /var/log/mysql-proxy.log