MySQLMySQL读写分离技术

1、简介

  当今MySQL使用相当广泛,随着用户之长及数据量的增大,高并发随之而来。然而我们发很多道可以化解数据库的压力。分布式数据库、负载均衡、读写分离、增加缓存服务器等等。这里我们拿下读写分离技术进行缓解数据库的压力。

  其中落实读写分离之技艺来广大方,这里我们以采用mysql-proxy这个当中软件来兑现。这个软件中蕴含一个朗诵写分离之lua文件,这也是咱们用mysql-proxy实现读写分离必用的文书,它需lua解析器进行剖析。因此我们还亟需装一个lua解析器。

 

2、基本条件

  三令linux虚拟主机

  Linux版本CentOS6.6、MySQL 5.5

  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主从复制与主主复制

http://www.cnblogs.com/phpstudy2015-6/p/6485819.html#_label2

简而言之介绍一下数据库的主从复制的布置:

第一步:

当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;

 

MySQL 1

第三步:

告诉二进制文件称与位置

在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   #翻开主从复制是否安排成功

MySQL 2

主从复制配置成功!

(注意:上面Relicate_Do_DB:aa表示主从复制只针对数据库aa【这是本人前设置的就从来不改了】,这里就不说话是了,要想去询问学医这个的言辞可参照文章http://www.cnblogs.com/phpstudy2015-6/p/6485819.html#_label7)

 

4、MySQL读写分离配置

百度云下载:链接:http://pan.baidu.com/s/1slTl18L 密码:9j0m

  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

MySQL 3

设置成功

 

5、MySQL读写分离测试

  1)、修改rw-splitting.lua文件

  修改默认连接,进行高效测试,不改的言语使达到连接数为4时才启用读写分离

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

MySQL 4

  # vi rw-splitting.lua

MySQL 5

  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脚本路劲

  &                     #意味着后台执行

MySQL 6

  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 7

当少数单mysql中查阅结果:一致

MySQL 8

结果表明:账号使用

(ps:id是起增长,之前高主主复制的时改变了配置文件,还并未转回来,就拿就就此正在先吧)

  5)、关闭12mysql的起复制

  mysql> stop slave;

MySQL 9

  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负之数

  主数据库:

MySQL 10

从今数据库:

MySQL 11

结果受到显得插入的数额有和主数据库,而从数据库没有,所以证明写会分离。

  7)、证明读分离

  使用proxy1@192.168.95.13账号登陆mysql,查看aa.tab1惨遭之数

mysql>use aa;
mysql>select*from tab1;

MySQL 12

结果丁显只有从数据库的数码,结合方面的测试,可以证明读分离。

 

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/functions
12 
13 #PROXY_PATH=/usr/local/bin
14 PROXY_PATH=/usr/local/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.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.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=/usr/local/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

 

#---我将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文件路径

–daemonMySQL   //定义以守护进程模式启动
–keepalive
  //使进程在那个关闭后能活动还原【上面的管住脚本没有添加这个参数】
–user=root   //以root用户身份启动服务
–log-level=debug  
//定义log日志级别,由高及低位分别发出(error|warning|info|message|debug)
–log-file=/usr/local/mysql-proxy/log/mysql-proxy.log
  //定义log日志文件路径

 

(以上是协调的有些见识和总,若有欠缺或不当的地方要各位指出)

作者:那么一叶随风

声明:以上就代表我以工作上中某一时间内总的见识还是结论。转载时伸手以文章页面明显位置给出本文链接

 

网站地图xml地图