MySQL配置读写分离

192.168.23.131与192.168.23.132两台服务器,131是主,132是从,131是读写,132是只读。myql-proxy的IP是192.168.23.130

下面开整

先安装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. [root@bogon ~]# mkdir /opt/install/
  5.  
  6. [root@bogon ~]# cd /opt/install/
  7.  
  8. [root@bogon install]# wget http://www.lua.org/ftp/lua-5.3.2.tar.gz
  9.  
  10. [root@bogon install]# tar zxvf lua-5.3.2.tar.gz
  11.  
  12. [root@bogon install]# cd lua-5.3.2
  13.  
  14. [root@bogon install]# make linux

下面开始安装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://cdn.mysql.com/archives/mysql-proxy/mysql-proxy-0.8.4-linux-el6-x86-64bit.tar.gz
  4.  
  5. [root@bogon install]# tar zxvf mysql-proxy-0.8.4-linux-el6-x86-64bit.tar.gz
  1. [root@bogon install]# mkdir /usr/local/mysql-proxy
  1. [root@bogon install]# cp /opt/install/mysql-proxy-0.8.4-linux-rhel5-x86-32bit/* /usr/local/mysql-proxy
  1. [root@bogon install]# cd /usr/local/mysql-proxy
  1. [root@bogon install]# export PATH=$PATH:/usr/local/mysql-proxy/bin/

  编辑mysql-proxy配置文件

编辑mysql-proxy配置文件

  1. [root@bogon install]# cp /usr/local/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua /usr/local/mysql-proxy/
  1. [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,保存,退出。

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

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

打开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 'proxy'@'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. | proxy | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 | 192.168.23.130 |
  10. +--------+-------------------------------------------+----------------+
  11. rows in set (0.00 sec)

没错结果存在。

但是我们要做的试验是测试读写分离,所以要让这两台服务器有误差才行。所以暂停132的从服务:

  1. mysql> slave stop;

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

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

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

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

  1. [root@bogon ~]# mysql -uproxy -p123456 -P4040 -h192.168.23.
  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: -
  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
  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=
  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 = ]; 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 = ]; then
  60. rm -f /var/lock/subsys/mysql-proxy
  61. rm -f $PROXY_PID
  62. fi
  63. ;;
  64. restart)
  65. $ stop
  66. sleep
  67. $ start
  68. ;;
  69. condrestart)
  70. [ -e /var/lock/subsys/mysql-proxy ] && $ restart
  71. ;;
  72. status)
  73. status mysql-proxy
  74. RETVAL=$?
  75. ;;
  76. *)
  77. echo "Usage: $0 {start|stop|restart|status|condrestart}"
  78. RETVAL=
  79. ;;
  80. esac
  81. exit $RETVAL

启动脚本:

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

mysql配置mysql-proxy读写分离的更多相关文章

  1. Mysql主从配置,实现读写分离

    大型网站为了软解大量的并发访问,除了在网站实现分布式负载均衡,远远不够.到了数据业务层.数据访问层,如果还是传统的数据结构,或者只是单单靠一台服务器扛,如此多的数据库连接操作,数据库必然会崩溃,数据丢 ...

  2. 黄聪:Mysql主从配置,实现读写分离

    大型网站为了软解大量的并发访问,除了在网站实现分布式负载均衡,远远不够.到了数据业务层.数据访问层,如果还是传统的数据结构,或者只是单单靠一台服务器扛,如此多的数据库连接操作,数据库必然会崩溃,数据丢 ...

  3. MySQL中间件之ProxySQL_读写分离/查询重写配置

    MySQL中间件之ProxySQL_读写分离/查询重写配置 Posted on 2016-12-25 by mark blue, mark Leave a comment MySQL 1.闲扯几句 读 ...

  4. MySQL主从同步、读写分离配置步骤、问题解决笔记

    MySQL主从同步.读写分离配置步骤.问题解决笔记 根据要求配置MySQL主从备份.读写分离,结合网上的文档,对搭建的步骤和出现的问题以及解决的过程做了如下笔记:       现在使用的两台服务器已经 ...

  5. MySql的主从复制以及读写分离详解

    MySQL主从复制(Master-Slave)与读写分离(MySQL-Proxy)实践 Mysql作为目前世界上使用最广泛的免费数据库,相信所有从事系统运维的工程师都一定接触过.但在实际的生产环境中, ...

  6. 基于Mysql-Proxy实现Mysql的主从复制以及读写分离(上)

    基于Mysql-Proxy实现Mysql的主从复制以及读写分离(上) 上周BOSS给分配任务让实现一下Mysql数据库的主从复制以及读写分离,然后花了一盏茶的功夫进行了调研,发现主从复制数据库进行一番 ...

  7. MySQL主从复制技术与读写分离技术amoeba应用

    MySQL主从复制技术与读写分离技术amoeba应用 前言:眼下在搭建一个人才站点,估计流量会非常大,须要用到分布式数据库技术,MySQL的主从复制+读写分离技术.读写分离技术有官方的MySQL-pr ...

  8. Mysql 高可用(MHA)-读写分离(Atlas)-分布式架构(Mycat)

    Mysql 高可用(MHA)-读写分离(Atlas) 1. 搭建主从复制(一主两从) 1.1 准备环境 1 主库:10.0.0.51/db01 2 从库:10.0.0.52/db02,10.0.0.5 ...

  9. mysql数据库主从同步读写分离(一)主从同步

    1.mysql数据库主从同步读写分离 1.1.主要解决的生产问题 1.2.原理 a.为什么需要读写分离? 一台服务器满足不了访问需要.数据的访问基本都是2-8原则. b.怎么做?  不往从服务器去写了 ...

  10. 基于Mysql-Proxy实现Mysql的主从复制以及读写分离(下)

    基于Mysql-Proxy实现Mysql的主从复制以及读写分离(下) 昨天谈到了Mysql实现主从复制,但由于时间原因并未讲有关读写分离的实现,之所以有读写分离,是为了使数据库拥有双机热备功能,至于双 ...

随机推荐

  1. navigate连接MySQL报错:navigate your password has expired to log in your must change it using a client that supports

    如图: 终端进入mysql: 第一次show databases的的时候,密码过期了,然后重置密码为12345,再次就可以显示了 参考连接:http://www.jb51.net/article/79 ...

  2. iOS蓝牙开发(一)蓝牙相关基础知识(转)

    转载自:http://www.cocoachina.com/ios/20150915/13454.html 原文作者:刘彦玮 蓝牙常见名称和缩写 MFI ======= make for ipad , ...

  3. 2.Android 自定义通用的Item布局

    转载:http://www.jianshu.com/p/e7ba4884dcdd BaseItemLayout 简介 在工作中经常会遇到下面的一些布局,如图标红处: 05.png 07.png 08. ...

  4. 【bzoj1503】 NOI2004—郁闷的出纳员

    http://www.lydsy.com/JudgeOnline/problem.php?id=1503 (题目链接) 题意 要求维护4种操作:插入一个数,将所有数加上k,将所有数减去k,删去数值小于 ...

  5. 使用Jayrock开源组件开发基于JSON-RPC协议的接口

    最近接手一个以前的项目,无意间发现此项目开发接口的组件:Jayrock(接口组件估计用的少,用的最多的估计是这个Jayrock.json.dll,用于解析json) 以下是Jayrock的介绍官网: ...

  6. squid节点添加新域名测试

    squid节点添加新域名 测试是否缓存成功 #!/bin/bash #-- clear #清屏 方便输出结果观看 url=* #需要测试的url array_node[]="*" ...

  7. Centos下 为Firefox安装Flash插件

    方法一: 直接到官网去下载RPM格式的安装包,下载好后直接 用 rpm -ivh XXXX.rpm 来安装即可. 方法二: 到官网下载tar.gz格式的,自己配置安装: #wget http://fp ...

  8. How to overcome “datetime.datetime not JSON serializable” in python?

    json.dumps(datetime.now) 意思是datetime.now不可json序列化,解决办法是转化成str或者加一个参数 cls=xxx 详细见: http://stackoverfl ...

  9. chmod权限设置

    一.其语法格式为:chmod [who] [opt] [mode] 文件/目录名 1.其中who表示对象,是以下字母中的一个或组合: u:表示文件所有者 g:表示同组用户 o:表示其它用户 a:表示所 ...

  10. 【Alpha版本】 第七天 11.15

    一.站立式会议照片: 二.项目燃尽图: 三.项目进展: 成 员 昨天完成任务 今天完成任务 明天要做任务 问题困难 心得体会 胡泽善 完成我要招聘的招聘详情显示,完成简历填写及显示功能 完成我要应聘的 ...