mysql配置mysql-proxy讀寫分離

MySQL配置讀寫分離mysql

在這裏你不再用擔憂高手省略了大段代碼了,由於我也是新手。linux

下面開整c++

先安裝lua面試

Lua 是一個小巧的腳本語言。Lua由標準C編寫而成,代碼簡潔優美,幾乎在全部操做系統和平臺上均可以編譯,運行。
一個完整的Lua解釋器不過200k,在目前全部腳本引擎中,Lua的速度是最快的。這一切都決定了Lua是做爲嵌入式腳本的最佳選擇。sql

先安裝可能的依賴包數據庫

[plain] view plain copy後端

print?在CODE上查看代碼片派生到個人代碼片centos

  1. [root@bogon ~]# yum -y install gcc* gcc-c++* autoconf* automake* zlib* libxml* ncurses-devel* libmcrypt* libtool* flex* pkgconfig*  
  2. libevent* glib* readline-devel  
  3.   
  4.   
  5. [root@bogon ~]# mkdir /opt/install/  
  6.   
  7. [root@bogon ~]# cd /opt/install/  
  8.   
  9. [root@bogon install]# wget http://www.lua.org/ftp/lua-5.1.4.tar.gz  
  10.   
  11. [root@bogon install]# tar zxvf lua-5.2.3.tar.gz  
  12.   
  13. [root@bogon install]# cd lua-5.2.3  
  14.   
  15. [root@bogon install]# make linux  


 

此時若是出現服務器

lua.c:67:31: fatal error: readline/readline.h: No such file or directory
說明缺乏libreadline-dev依賴包app

[plain] view plain copy

print?在CODE上查看代碼片派生到個人代碼片

  1. [root@bogon install]# make install  
  2.   
  3. [root@bogon install]# export LUA_CFLAGS="-I/usr/local/include" LUA_LIBS="-L/usr/local/lib -llua -ldl" LDFLAGS="-lm"  


 

這行代碼我也不知道啥做用,好像是的指定環境變量。

 

下面開始安裝mysql-proxy

安裝以前先看一下本身機器是不是64位系統
查看centos內核的版本

[plain] view plain copy

print?在CODE上查看代碼片派生到個人代碼片

  1. [root@bogon install]# cat /etc/issue  



查看linux版本

[plain] view plain copy

print?在CODE上查看代碼片派生到個人代碼片

  1. [root@bogon install]# cat /proc/version  
  2. [root@bogon install]# lsb_release -a  


 

 

若是以上命令都沒有出現64字眼說明是32位系統,這裏主要是肯定你將要下載的mysql-proxy版本應該是哪一個。

下載地址:http://mysql.cdpa.nsysu.edu.tw/Downloads/MySQL-Proxy/

[plain] view plain copy

print?在CODE上查看代碼片派生到個人代碼片

  1. [root@bogon install]# cd /opt/install  
  2.   
  3. [root@bogon install]# wget http://mysql.cdpa.nsysu.edu.tw/Downloads/MySQL-Proxy/mysql-proxy-0.8.4-linux-rhel5-x86-32bit.tar.gz  
  4.   
  5. [root@bogon install]# tar zxvf  mysql-proxy-0.8.4-linux-rhel5-x86-32bit.tar.gz  
  6.   
  7. [root@bogon install]# mkdir /opt/mysql-proxy/  
  8.   
  9. [root@bogon install]# cp /opt/install/mysql-proxy-0.8.4-linux-rhel5-x86-32bit/* /opt/mysql-proxy/  
  10.   
  11. [root@bogon install]# cd /opt/mysql-proxy/  
  12.   
  13. [root@bogon install]# export PATH=$PATH:/opt/mysql-proxy/bin/  


 

編輯mysql-proxy配置文件

[plain] view plain copy

print?在CODE上查看代碼片派生到個人代碼片

  1. [root@bogon install]# cp doc/mysql-proxy/rw-splitting.lua  ./  
  2.   
  3. [root@bogon install]# vi rw-splitting.lua  


 

找到:

 

[plain] view plain copy

print?在CODE上查看代碼片派生到個人代碼片

  1. if not proxy.global.config.rwsplit then  
  2.         proxy.global.config.rwsplit = {  
  3.                 min_idle_connections = 4,  
  4.                 max_idle_connections = 8,  
  5.   
  6.                 is_debug = false  
  7.         }  
  8. end  


 

 

這裏的四、8是指定連接數,你們能夠在作試驗時調整爲1。

ok,保存,退出。

 

[plain] view plain copy

print?在CODE上查看代碼片派生到個人代碼片

  1. [root@bogon install]# mysql-proxy --proxy-read-only-backend-addresses=192.168.23.132:3306 --proxy-backend-addresses=192.168.2.131:3306 --proxy-lua-script=/opt/mysql-proxy/share/rw-splitting.lua&  


 

 

這裏的192.168.23.131與192.168.23.132是主從數據庫。參見http://blog.csdn.net/e421083458/article/details/19574049

以上命令後綴追加&表示爲後端任務。

 

[plain] view plain copy

print?在CODE上查看代碼片派生到個人代碼片

  1. [root@bogon install]# bg  


 

 

將正在執行命令隱藏到後端

 

[plain] view plain copy

print?在CODE上查看代碼片派生到個人代碼片

  1. [root@bogon install]# jobs  


 

 

查看正在後端運行的命令

 

[plain] view plain copy

print?在CODE上查看代碼片派生到個人代碼片

  1. [richard@bogon ~]$ fg 1  


 

 

將後端命令顯示到前臺

 

打開4040端口防火牆端口,由於mysql-proxy監聽端口是4040不再是3306了。正好作以區分。

[plain] view plain copy

print?在CODE上查看代碼片派生到個人代碼片

  1. [root@bogon install]# /sbin/iptables -I INPUT -p tcp --dport 4040 -j ACCEPT  
  2.   
  3. [root@bogon install]#  /etc/rc.d/init.d/iptables save  
  4.   
  5. [root@bogon install]# service iptables save  


 

查看監聽狀況:

[plain] view plain copy

print?在CODE上查看代碼片派生到個人代碼片

  1. [root@bogon install]# netstat -tlp | grep mysql-proxy  
  2.   
  3. tcp        0      0 *:yo-main                   *:*                         LISTEN      13364/mysql-proxy  


 

yo-main很奇怪吧,對我也奇怪,無論它了,下面咱們測試一下功能吧。

 

剛剛咱們提到的192.168.23.131與192.168.23.132兩臺服務器,131是主,132是從,131是讀寫,132是隻讀。myql-proxy的IP是192.168.23.130

建立用於讀寫分離的數據庫鏈接用戶

在131服務器上操做如下命令:

[plain] view plain copy

print?在CODE上查看代碼片派生到個人代碼片

  1. [root@bogon ~]# mysql -uroot  -p123456  
  2.   
  3. mysql> grant all on *.* to 'proxy1'@'192.168.23.130' identified by '123456';  


 

因爲咱們設置了131與132的主從複製,因此此時132也執行了以上命令,咱們能夠肯定一下。

在132服務上操做如下命令:

[plain] view plain copy

print?在CODE上查看代碼片派生到個人代碼片

  1. mysql> select user,password,host from mysql.user;  
  2.   
  3. +--------+-------------------------------------------+----------------+  
  4. | user   | password                                  | host           |  
  5. +--------+-------------------------------------------+----------------+  
  6. | root   | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 | localhost      |  
  7. | root   |                                           | bogon          |  
  8. | root   |                                           | 127.0.0.1      |  
  9. | proxy1 | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 | 192.168.23.130 |  
  10. +--------+-------------------------------------------+----------------+  
  11. 4 rows in set (0.00 sec)  


 

沒錯結果存在。

可是咱們要作的試驗是測試讀寫分離,因此要讓這兩臺服務器有偏差才行。因此暫停132的從服務:

 

[plain] view plain copy

print?在CODE上查看代碼片派生到個人代碼片

  1. mysql> slave stop;  


 

 

下面咱們在131服務器上操做如下命令:

 

[plain] view plain copy

print?在CODE上查看代碼片派生到個人代碼片

  1. mysql> insert into first_tb values (007,’first’);  
  2. mysql> insert into first_tb values (110,’second’);  


 

 

最後再到132上確認一下數據是否有偏差,下面試驗開始。

在131上打開4個終端,依次敲如下的命令:

[plain] view plain copy

print?在CODE上查看代碼片派生到個人代碼片

  1. [root@bogon ~]# mysql -uproxy1 -p'123456' -h192.168.23.130 -P4040  
  2.   
  3. mysql> select * from first_db.first_tb;  


 

你會發現結果會有不同,那證實配置試驗成功。也能夠多此嘗試以上兩行代碼直到獲得結果。

試驗結束記得將slave start,方法參照http://blog.csdn.net/e421083458/article/details/19574049

追加內容:設置mysql-proxy服務腳本。

 

[plain] view plain copy

print?在CODE上查看代碼片派生到個人代碼片

  1. #!/bin/sh  
  2.   
  3. #  
  4. # mysql-proxy This script starts and stops the mysql-proxy daemon  
  5. #  
  6. # chkconfig: - 78 30  
  7. # processname: mysql-proxy  
  8. # description: mysql-proxy is a proxy daemon to mysql  
  9.   
  10. # Source function library.  
  11. . /etc/rc.d/init.d/functions  
  12.   
  13. #PROXY_PATH=/usr/local/bin  
  14. PROXY_PATH=/opt/mysql-proxy/bin  
  15.   
  16. prog="mysql-proxy"  
  17.   
  18. # Source networking configuration.  
  19. . /etc/sysconfig/network  
  20.   
  21. # Check that networking is up.  
  22. [ ${NETWORKING} = "no" ] && exit 0  
  23.   
  24. # Set default mysql-proxy configuration.  
  25. #PROXY_OPTIONS="--daemon"  
  26.   
  27. PROXY_OPTIONS="--proxy-read-only-backend-addresses=192.168.23.132:3306 --proxy-backend-addresses=192.168.23.131:3306 --proxy-lua-script=/opt/mysql-proxy/share/rw-splitting.lua"  
  28.   
  29. PROXY_PID=/opt/mysql-proxy/run/mysql-proxy.pid  
  30.   
  31. # Source mysql-proxy configuration.  
  32. if [ -f /etc/sysconfig/mysql-proxy ]; then  
  33.         . /etc/sysconfig/mysql-proxy  
  34. fi  
  35.   
  36. PATH=$PATH:/usr/bin:/usr/local/bin:$PROXY_PATH  
  37. # By default it's all good  
  38. RETVAL=0  
  39.   
  40. # See how we were called.  
  41. case "$1" in  
  42.   start)  
  43.         # Start daemon.  
  44.         echo -n $"Starting $prog: "  
  45.         $NICELEVEL $PROXY_PATH/mysql-proxy $PROXY_OPTIONS --daemon --pid-file=$PROXY_PID --user=root --log-level=debug --log-file=/opt/mysql-proxy/log/mysql-proxy.log  
  46.         RETVAL=$?  
  47.         echo  
  48.         if [ $RETVAL = 0 ]; then  
  49.                 touch /var/lock/subsys/mysql-proxy]  
  50.                 echo "ok"  
  51.         fi  
  52.        ;;  
  53.   stop)  
  54.         # Stop daemons.  
  55.         echo -n $"Stopping $prog: "  
  56.         killproc $prog  
  57.         RETVAL=$?  
  58.         echo  
  59.         if [ $RETVAL = 0 ]; then  
  60.                 rm -f /var/lock/subsys/mysql-proxy  
  61.                 rm -f $PROXY_PID  
  62.         fi  
  63.        ;;  
  64.   restart)  
  65.         $0 stop  
  66.         sleep 3  
  67.         $0 start  
  68.        ;;  
  69.   condrestart)  
  70.        [ -e /var/lock/subsys/mysql-proxy ] && $0 restart  
  71.       ;;  
  72.   status)  
  73.         status mysql-proxy  
  74.         RETVAL=$?  
  75.        ;;  
  76.   *)  
  77.         echo "Usage: $0 {start|stop|restart|status|condrestart}"  
  78.         RETVAL=1  
  79.        ;;  
  80. esac  
  81. exit $RETVAL  


啓動腳本:

 

[root@bogon init.d]# /opt/mysql-proxy/init.d/mysql-proxy start

 

有任何問題,歡迎留言。

相關文章
相關標籤/搜索