个中实现读写分离的技能有很多方法,这里我们将采取mysql-proxy这个中间软件来实现。
这个软件中含有一个读写分离的lua文件,这也是我们利用mysql-proxy实现读写分离必用的文件,它须要lua解析器进行解析。
因此我们还须要安装一个lua解析器

2、基本环境

  三台linux虚拟主机

  Linux版本CentOS6.6、MySQL 5.5

phpmysql分离有关于MySQL读写分别建议珍藏 Docker

  mysql-proxy-0.8.5

  lua-5.1.4

  ip:192.168.95.11(写)、192.168.95.12(读)、192.168.95.13(mysql-proxy)

3、配置主从复制

mysql主从复制与主主复制

粗略先容一下数据库的主从复制的配置:

第一步:

在192.168.95.11中创建一个192.168.95.12主机中可以登录的MySQL用户

用户:mysql12

密码:mysql12

mysql>GRANT REPLICATION SLAVE ON . TO ‘mysql12’@’192.168.95.12’ IDENTIFIED BY ‘mysql12’;mysql>FLUSH PRIVILEGES;

第二步:

查看192.168.95.11MySQL做事器二进制文件名与位置

mysql>SHOW MASTER STATUS;

第三步:

奉告二进制文件名与位置在192.168.95.12中实行:

mysql> change master to -> master_host='192.168.95.11', -> master_user='mysql12', -> master_password='mysql12', -> master_log_file='mysql-bin.000124', -> master_log_pos=586;

第四步:

在192.168.95.12中

mysql>SLAVE START; #开启复制

mysql>SHOW SLAVE STATUS\G #查看主从复制是否配置成功

主从复制配置成功!

(把稳:上面Relicate_Do_DB:aa表示主从复制只针对数据库aa【这是我之前设置的就没改了】,这里就不讲这个了,要想去理解学医这个的话可以参考文章http://www.cnblogs.com/phpstudy2015-6/p/6485819.html#_label7)

4、MySQL读写分离配置

百度云下载:链接:https://pan.baidu.com/s/1FBW-76Ew-fOfNb0fW878ZQ 密码:?

4.1、安装lua

  官网下载:http://www.lua.org/download.html

  Lua 是一个小巧的脚本措辞。
Lua由标准C编写而成,代码简洁幽美,险些在所有操作系统和平台上都可以编译,运行。

  一个完全的Lua阐明器不过200k,在目前所有脚本引擎中,Lua的速率是最快的。
这统统都决定了Lua是作为嵌入式脚本的最佳选择。

  1)、安装lua须要依赖很多软件包。

  可以通过rpm -qa | grep name检讨以下软件是否安装:

  gcc、gcc-c++、autoconf、automake、zlib、libxml、ncurses-devel、libmcrypt、libtool、flex、pkgconfig、libevent、glib

  若短缺干系的软件包,可通过yum -y install办法在线安装,或直接从系统安装光盘中找到并通过rpm -ivh办法安装。
(我的话一样平常是直接在系统光盘软件库中找到直接rpm安装的,有些找不到,则先在网高下载然后在ftp传给linux再进行安装)

  2)、依赖软件安装完毕后则进行编译安装lua

  MySQL-Proxy的读写分离紧张是通过rw-splitting.lua脚本实现的,因此须要安装lua。

  官网下载:http://www.lua.org/download.html(下载源码包)

# wget http://www.lua.org/ftp/lua-5.1.4.tar.gz # tar zxvf lua-5.1.4.tar.gz # cd lua-5.1.4 # make linux# make install# export LUA_CFLAGS="-I/usr/local/include" LUA_LIBS="-L/usr/local/lib -llua -ldl" LDFLAGS="-lm" (我安装的时候是直接在光盘软件库中找到,直接rpm安装)4.2、安装mysql-proxy

  1)、首先查看linux版本确认是32位还是64为系统

  查看linux内核版本

  # cat /etc/issue

  查看linux版本

  # cat /proc/version

  2)、按系统位数下载(上面百度云链接64位的文件)

  3)、安装

# tar –zxvf mysql-proxy-0.8.5- linux-rhel5-x86-64bit.tar.gz# mkdir /usr/local/mysql-proxy# cp ./ mysql-proxy-0.8.5-linux-rhel5-x86-64bit/ /usr/local/mysql-proxy# cd /usr/local/mysql-proxy

安装成功

5、MySQL读写分离测试1)、修正rw-splitting.lua文件

  修正默认连接,进行快速测试,不修正的话要达到连接数为4时才启用读写分离

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

  # vi rw-splitting.lua

2)、修正完成后,启动mysql-proxy

# cd /usr/local/mysql/bin# ./mysql-proxy --proxy-read-only-backend-addresses=192.168.95.12:3306 --proxy-backend-addresses=192.168.95.11:3306 --proxy-lua-script=/usr/local/mysql-proxy/rw-splitting.lua &

参数:

  --proxy-read-only-backend-addresses  #只读做事器地址(ip)

  --proxy-backend-addresses       #做事器地址(主理事器)

  --proxy-lua-script            #lua脚本路劲

  &                     #表示后台实行

3)、创建用于读写分离的数据库连接用户

  用户名:proxy1

  密 码:321

mysql>grant all on . to 'proxy1'@'192.168.95.13' identified by '321';mysql>use aa;mysql>create table tab1(id int auto_increment,name varchar(32) not null,primary key(id));

【由于已经开启了主从复制以是,11、12主机mysql中都创建了这个用户】

4)、测试上岸账号proxy1@192.168.95.13进行添加数据

  可以利用任意ip客户端上岸这个账号

  在192.168.95.13上岸:

  # ./mysql -u proxy1 -P4040 -h192.168.95.13 –p

在两个mysql中查当作果:同等

结果表明:账号利用

(ps:id是自增长,之前高主主复制的时候变动了配置文件,还没变动回来,就姑息用着先吧)

5)、关闭12mysql的从复制

  mysql> stop slave;

6)、证明写分离

  利用proxy1@192.168.95.13账号打开多个客户端进行插入数据

  打开三个mysql客户端分别插入2条数据:

mysql> insert into tab1 (name) values('stop_slave11111');….mysql> insert into tab1 (name) values('stop_slave6666’);

  查看:

  分别上岸11mysql与12mysql查看aa.tab1中的数据

  主数据库:

从数据库:

结果中显示插入的数据存在与主数据库,而从数据库没有,以是证明写能够分离。

7)、证明读分离

  利用proxy1@192.168.95.13账号上岸mysql,查看aa.tab1中的数据

mysql>use aa;mysql>selectfrom tab1;

结果中显示只有从数据库的数据,结合上面的测试,可以证明读分离。

6、建议

为了方便启动与管理mysql-proxy可以创建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/functions12 13 #PROXY_PATH=/usr/local/bin14 PROXY_PATH=/usr/local/mysql-proxy/bin15 16 prog="mysql-proxy"17 18 # Source networking configuration.19 . /etc/sysconfig/network20 21 # Check that networking is up.22 [ ${NETWORKING} = "no" ] && exit 023 24 # Set default mysql-proxy configuration.25 #PROXY_OPTIONS="--daemon"26 27 PROXY_OPTIONS="--proxy-read-only-backend-addresses=192.168.95.12:3306 --proxy-backend-addresses=192.168.95.11:3306 --proxy-lua-script=/usr/local/mysql-proxy/rw-splitting.lua"28 29 PROXY_PID=/usr/local/mysql-proxy/run/mysql-proxy.pid30 31 # Source mysql-proxy configuration.32 if [ -f /etc/sysconfig/mysql-proxy ]; then33 . /etc/sysconfig/mysql-proxy34 fi35 36 PATH=$PATH:/usr/bin:/usr/local/bin:$PROXY_PATH37 # By default it's all good38 RETVAL=039 40 # See how we were called.41 case "$1" in42 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=/usr/local/mysql-proxy/log/mysql-proxy.log46 RETVAL=$?47 echo48 if [ $RETVAL = 0 ]; then49 touch /var/lock/subsys/mysql-proxy]50 echo "ok"51 fi52 ;;53 stop)54 # Stop daemons.55 echo -n $"Stopping $prog: "56 killproc $prog57 RETVAL=$?58 echo59 if [ $RETVAL = 0 ]; then60 rm -f /var/lock/subsys/mysql-proxy61 rm -f $PROXY_PID62 fi63 ;;64 restart)65 $0 stop66 sleep 367 $0 start68 ;;69 condrestart)70 [ -e /var/lock/subsys/mysql-proxy ] && $0 restart71 ;;72 status)73 status mysql-proxy74 RETVAL=$?75 ;;76 )77 echo "Usage: $0 {start|stop|restart|status|condrestart}"78 RETVAL=179 ;;80 esac81 exit $RETVAL

#---我将mysql-proxy做事管理脚本放在了/usr/local/mysql-proxy/init.d/文件夹里#---给实行权限,建立相应目录#chmod +x /usr/local/mysql-proxy/init.d/mysql-proxy#mkdir /usr/local/mysql-proxy/run#mkdir /usr/local/mysql-proxy/log#cd /usr/local/mysql-proxy/init.d/#---启动mysql-proxy#./mysql-proxy start#---停滞mysql-proxy#./mysql-proxy stop#---重启mysql-proxy#./mysql-proxy restart

一些干系参数:

PROXY_PATH=/usr/local/mysql-proxy/bin //定义mysql-proxy做事二进制文件路径

--proxy-read-only-backend-addresses=192.168.95.12:3306 //定义后端只读从做事器地址--proxy-backend-addresses=192.168.95.11:3306 //定义后端主理事器地址--proxy-lua-script=/usr/local/mysql-proxy/rw-splitting.lua //定义lua读写分离脚本路径

PROXY_PID=/usr/local/mysql-proxy/run/mysql-proxy.pid //定义mysql-proxy PID文件路径

--daemon //定义以守护进程模式启动--keepalive //使进程在非常关闭后能够自动规复【上面的管理脚本没有加上此参数】--user=root //以root用户身份启动做事--log-level=debug //定义log日志级别,由高到低分别有(error|warning|info|message|debug)--log-file=/usr/local/mysql-proxy/log/mysql-proxy.log //定义log日志文件路径

(以上是自己的一些见地与总结,若有不敷或者缺点的地方请各位指出)

如果本文对你有帮助,别忘却给我个3连 ,点赞,转发,评论,

咱们下期见。

原文出处:https://www.cnblogs.com/phpstudy2015-6/p/6687480.html