分享

Mysql-proxy主从搭建读写分离全过程

 用勿龍潛 2011-12-29

Mysql-proxy主从搭建读写分离全过程

废话不说!

Mysql-proxy是什么,大家都知道,不知道的就别往下看了...
首先搭建 mysql 主从数据库,参考: http://blog.csdn.net/swengineer/archive/2011/03/11/6239711.aspx

下载 mysql-proxy 最新版,本文撰写时最新版本为 MySQL Proxy 0.8.1 alpha

安装 mysql-proxy 步骤如下:

解压 mysql-proxy-0.8.1-linux-glibc2.3-x86-32bit.gz

Java代码 复制代码 收藏代码
  1. tar zxvf mysql-proxy-0.8.1-linux-glibc2.3-x86-32bit.gz   
  2.   
  3. cp -R mysql-proxy-0.8.1-linux-glibc2.3-x86-32bit /usr/local/proxy-mysql  


新建或编辑 /etc/mysql-proxy.cnf 文件,添加以下内容 ( 具体参数根据实际情况修改 ) :

Java代码 复制代码 收藏代码
  1. vi /etc/mysql-proxy.cnf   
  2.   
  3. [mysql-proxy]   
  4.   
  5. admin-username = zhangdongyu   
  6.   
  7. admin-password = 123123  
  8.   
  9. daemon = true  
  10.   
  11. keepalive = true  
  12.   
  13. proxy-backend-addresses = 192.168.0.88:3306  
  14.   
  15. proxy-read-only-backend-addresses = 192.168.0.88:3307  
  16.   
  17. proxy-lua-script = /usr/local/proxy-mysql/share/doc/mysql-proxy/rw-splitting.lua   
  18.   
  19. admin-lua-script = /usr/local/proxy-mysql/share/doc/mysql-proxy/admin-sql.lua   
  20.   
  21. log-file = /usr/local/proxy-mysql/cn.log   
  22.   
  23. log-level = debug  

 

主要参数注解:


proxy-backend-addresses                    mysql 主库(写)地址

proxy-read-only-backend-addresses     mysql 从库(读)地址

proxy-lua-script                                 读写分离脚本

admin-lua-script                                 admin 脚本

admin-username                                 数据库用户名(主从上都需建立相同用户)

admin-password                                 数据库密码

daemon                                             daemon 进程运行

keepalive                                           保持连接(启动进程会有 2 个,一号进程用来监视二号进行,如果二号进程死掉自动重建,此参数在旧版本中无法使用)

编辑 profile/.bash_profile 脚本

Java代码 复制代码 收藏代码
  1. vi /etc/profile( 或者 .bash_profile)   
  2.   
  3. LUA_PATH="/usr/local/proxy-mysql/share/doc/mysql-proxy/?.lua"  
  4.   
  5. export LUA_PATH   
  6.   
  7. export PATH=$PATH:/usr/local/proxy-mysql/bin   
  8.   
  9. :wq   
  10.   
  11. source /etc/profile  

 

为方便建立建立 mysql-proxy.sh 脚本

Java代码 复制代码 收藏代码
  1. #!/bin/bash   
  2.   
  3. mode=$1  
  4.   
  5. if [ -z "$mode" ] ; then   
  6.   
  7. mode="start"  
  8.   
  9. fi   
  10.   
  11. case $mode in   
  12.   
  13. start)   
  14.   
  15. mysql-proxy --defaults-file=/etc/mysql-proxy.cnf>/usr/local/proxy-mysql/cn.log &   
  16.   
  17. ;;   
  18.   
  19. stop)   
  20.   
  21. killall -9 mysql-proxy   
  22.   
  23. ;;   
  24.   
  25. restart)   
  26.   
  27. if $0 stop ; then   
  28.   
  29. $0 start   
  30.   
  31. else  
  32.   
  33. echo  "Restart failed!"  
  34.   
  35. exit 1  
  36.   
  37. fi   
  38.   
  39. ;;   
  40.   
  41. esac   
  42.   
  43. exit 0   
 

启动 mysql-proxy

sh 脚本

启动: ./mysql-proxy.sh  ./mysql-proxy.sh start

 

重启: ./mysql-proxy.sh restart

停止: ./mysql-proxy.sh stop

 

测试:

为达到测试效果,修改 admin-sql.lua 脚本以下两行

vi /usr/local/proxy-mysql/share/doc/mysql-proxy/rw-splitting.lua

Java代码 复制代码 收藏代码
  1. if not proxy.global.config.rwsplit then   
  2.   
  3.         proxy.global.config.rwsplit = {   
  4.   
  5.                 min_idle_connections = 1,   # 修改最小连接为 1  
  6.   
  7.                 max_idle_connections = 2,   # 修改最大连接为 2  
  8.   
  9.                 is_debug = true            #debug 为 true  
  10.   
  11.         }   
  12.   
  13. end   

 

重启 mysql-proxy 代理

开启两个终端分别连接代理:

ONE ./mysql -h192.168.0.88 -uzhangdongyu -p123123 -P4040

TWO ./mysql -h192.168.0.88 -uzhangdongyu -p123123 -P4040

可看到连接成功信息:

 

操作 ONE 客户端:

执行 select 语句观察数据库 log 文件

select * from z_member_info;

观察主从库日志文件,发现查询发生在主库?

主库: 192.168.0.88:3306 日志文件: tail -f /usr/local/mysql/localstate/mysqlexecute.log

 

这是因为 mysql-proxy 代理会检测客户端连接,当连接没有超过 min_idle_connections 预设值时,不会进行读写分离,即查询操作会发生到主库上。

 

操作 TWO 客户端:

执行 select 语句观察数据库 log 文件

select * from z_member_info;

观察主从库日志文件,发现主库没有任何记录,查询日志记录在从库。

从库: 192.168.0.88:3306 日志文件: tail -f /usr/local/mysql3307/localstate/mysqlexecute.log

 

操作两个终端进行 insert 操作,会发现写操作始终被主库( 3306 )日志文件记录。

 

至此 mysql-proxy 安装测试完成。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多