虚拟化容器,大数据,DBA,中间件,监控。

MySQL配置读写分离

17 05月
作者:admin|分类:应用管理

MySQL配置读写分离

在这里你再也不用担心高手省略了大段代码了,因为我也是新手。

下面开整

先安装lua

Lua 是一个小巧的脚本语言。Lua由标准C编写而成,代码简洁优美,几乎在所有操作系统和平台上都可以编译,运行。
一个完整的Lua解释器不过200k,在目前所有脚本引擎中,Lua的速度是最快的。这一切都决定了Lua是作为嵌入式脚本的最佳选择。

先安装可能的依赖包

  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依赖包

  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内核的版本

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


查看linux版本
  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/

  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配置文件

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


找到:

  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  


这里的4、8是指定链接数,大家可以在做试验时调整为1。

ok,保存,退出。

  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

以上命令后缀追加&表示为后端任务。

  1. [root@bogon install]# bg  


将正在执行命令隐藏到后端

  1. [root@bogon install]# jobs  


查看正在后端运行的命令

  1. [richard@bogon ~]$ fg 1  


将后端命令显示到前台


打开4040端口防火墙端口,因为mysql-proxy监听端口是4040再也不是3306了。正好做以区分。

  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  


查看监听情况:

  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服务器上操作以下命令:

  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服务上操作以下命令:

  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的从服务:

  1. mysql> slave stop;  


下面我们在131服务器上操作以下命令:

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


最后再到132上确认一下数据是否有误差,下面试验开始。

在131上打开4个终端,依次敲以下的命令:

  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服务脚本。

  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
浏览1892 评论0
返回
目录
返回
首页
How to install Ioncube Loader PHP on Linux Ubuntu MySQL、Oracle、MongoDB、Redis数据库监控系统 Lepus