程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> 關於MYSQL數據庫 >> MySQL Proxy 安裝與讀寫分離體驗

MySQL Proxy 安裝與讀寫分離體驗

編輯:關於MYSQL數據庫

1. 安裝
下載已經編譯好的安裝包,或者預編譯安裝包均可,在這裡,使用預編譯版本。

[@s1.yejr.com ~]# tar zxf mysql-proxy-0.6.0-linux-rhas4-x86.tar.gz
[@s1.yejr.com ~]# cd mysql-proxy-0.6.0-linux-rhas4-x86
#可以看到有2個目錄
[@s1.yejr.com mysql-proxy-0.6.0-linux-rhas4-x86]# ls
sbin  share
[@s1.yejr.com mysql-proxy-0.6.0-linux-rhas4-x86]# mv sbin/mysql-proxy /usr/local/sbin/
[@s1.yejr.com mysql-proxy-0.6.0-linux-rhas4-x86]# ls share
mysql-proxy         tutorial-constants.lua  tutorial-packets.lua     tutorial-rewrite.lua  tutorial-warnings.lua
tutorial-basic.lua  tutorial-inject.lua     tutorial-query-time.lua  tutorial-states.lua
#將lua腳本放到/usr/local/share下,以備他用
[@s1.yejr.com mysql-proxy-0.6.0-linux-rhas4-x86]# mv share/mysql-proxy /usr/local/share/
#刪除符號連接等垃圾代碼
[@s1.yejr.com mysql-proxy-0.6.0-Linux-rhas4-x86]# strip /usr/local/sbin/MySQL-proxy

2. 啟動
編譯一下啟動管理腳本:

[@s1.yejr.com ~]# vi /etc/init.d/mysql-proxy
#!/bin/sh
export LUA_PATH=/usr/local/share/mysql-proxy/?.lua
mode=$1
if [ -z "$mode" ] ; then
mode="start"
fi
case $mode in
'start')
mysql-proxy --daemon \
--admin-address=:4401 \
--proxy-address=:3307 \
--proxy-backend-addresses=:3306 \
--proxy-read-only-backend-addresses=192.168.133.232:3306 \
--proxy-read-only-backend-addresses=10.10.74.61:3306 \
--proxy-lua-script=/usr/local/share/mysql-proxy/rw-splitting.lua
;;
'stop')
killall MySQL-proxy
;;
'restart')
if $0 stop ; then
$0 start
else
echo  "retart failed!!!"
exit 1
fi
;;
esac
exit 0

現在解釋一下啟動腳本:
--daemon 采用daemon方式啟動
--admin-address=:4401 指定MySQL proxy的管理端口,在這裡,表示本機的4401端口
--proxy-address=:3307 指定MySQL proxy的監聽端口,也可以用 127.0.0.1:3307 表示
--proxy-backend-addresses=:3306 指定MySQL主機的端口
--proxy-read-only-backend-addresses=192.168.1.1:3306 指定只讀的MySQL主機端口
--proxy-read-only-backend-addresses=192.168.1.2:3306 指定另一個只讀的MySQL主機端口
--proxy-lua-script=/usr/local/share/MySQL-proxy/rw-splitting.lua 指定lua腳本,在這裡,使用的是rw-splitting腳本,用於讀寫分離

完整的參數可以運行以下命令查看:

MySQL-proxy --help-all

運行以下命令啟動/停止/重啟MySQL proxy:

[@s1.yejr.com ~]# /etc/init.d/mysql-proxy start
[@s1.yejr.com ~]# /etc/init.d/mysql-proxy stop
[@s1.yejr.com ~]# /etc/init.d/MySQL-proxy restart

3. 試用

[@s1.yejr.com ~]# mysql -h127.0.0.1 -uroot -P3307
MySQL> show processlist;
+-------+------+----------------+------+---------+------+-------+------------------+
| Id    | User | Host           | db   | Command | Time | State | Info             |
+-------+------+----------------+------+---------+------+-------+------------------+
| 30052 | root | localhost:9656 | NULL | Query   |    0 | NULL  | show processlist |
+-------+------+----------------+------+---------+------+-------+------------------+

可以看到,產生了一個新連接。

用sysbench測試一下,看會不會掛掉:

[@s1.yejr.com ~]# sysbench --test=oltp --mysql-table-engine=innodb --oltp-table-size=1000000 \
--mysql-socket=/tmp/mysql.sock --mysql-user=root --mysql-db=test prepare
[@s1.yejr.com ~]# sysbench --test=oltp --mysql-table-engine=innodb --oltp-table-size=1000000 \
--mysql-socket=/tmp/mysql.sock --mysql-user=root --MySQL-db=test run
.........
.........
Threads fairness:
events (avg/stddev):           10000.0000/0.00
execution time (avg/stddev):   23.0387/0.00

還好,沒給大家丟臉,剩下的測試自己完成吧 :)

4. 其他
MySQL proxy還可以實現連接池的功能,這在很多LAMP開發中是軟肋,因此,有了MySQL proxy,就可以不用再擔心連接數超限的問題了。
如果使用rw-splitting.lua腳本的話,最好修改以下2個參數的默認值:

min_idle_connections = 1
max_idle_connections = 3
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved