[mysql]linux mysql 读写分离

作者:flymaster

qq:908601287

blog:http://www.cnblogs.com/flymaster500/

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;

第三步:
告知二进制文件名与位置
在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读写分离配置
百度云下载:链接: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

安装成功
 
回到顶部
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>select*from 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/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文件路径
--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日志文件路径

作者:flymaster

qq:908601287

blog:http://www.cnblogs.com/flymaster500/

转载于:https://www.cnblogs.com/flymaster500/p/10155731.html

[mysql]linux mysql 读写分离的更多相关文章

  1. Linux下MySQL主从复制(GTID)+读写分离(ProxySQL)-实施笔记

    GTID概念: GTID( Global Transaction Identifier)全局事务标识.GTID 是 5.6 版本引入的一个有关于主从复制的重大改进,相对于之前版本基于 Binlog 文 ...

  2. MySQL + Atlas --- 部署读写分离

    阅读目录 1. 数据库用户配置 2. 主从数据库连接 3. Atlas配置 4. 读写分离测试 序章 Atlas是360团队弄出来的一套基于MySQL-Proxy基础之上的代理,修改了MySQL-Pr ...

  3. Mysql主从配置+读写分离

    Mysql主从配置+读写分离     MySQL从5.5版本开始,通过./configure进行编译配置方式已经被取消,取而代之的是cmake工具.因此,我们首先要在系统中源码编译安装cmake工具. ...

  4. Mysql主从配置+读写分离(转)

       MySQL从5.5版本开始,通过./configure进行编译配置方式已经被取消,取而代之的是cmake工具.因此,我们首先要在系统中源码编译安装cmake工具. 注:安装前须查看是否已经安装了 ...

  5. 使用docker 实现MySQL主从同步/读写分离

    1. 利用 docker 实现 mysql 主从同步 / 读写分离 为了保证数据的完整和安全,mysql 设计了主从同步,一个挂掉还可以用另个.最近重构论坛,想来改成主从吧.担心失误,就先拿 dock ...

  6. 利用MySQL Router构建读写分离MGR集群

    GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源. 目录 1. 部署MySQL Router 2. 启动mysqlrouter服务 3. 确认读写分离效果 4. 确认只读负载 ...

  7. Mysql主从复制,读写分离(mysql-proxy),双主结构完整构建过程

    下面介绍MySQL主从复制,读写分离,双主结构完整构建过程,不涉及过多理论,只有实验和配置的过程. Mysql主从复制(转载请注明出处,博文地址:) 原理是master将改变记录到二进制日志(bina ...

  8. 利用oneproxy部署mysql数据库的读写分离

    实验系统:CentOS 6.6_x86_64 实验前提:防火墙和selinux都关闭 实验说明:本实验共有4台主机,IP分配如拓扑 实验软件:mariadb-10.0.20 oneproxy-rhel ...

  9. Amoeba+Mysql实现数据库读写分离

    一.Amoeba 是什么 Amoeba(变形虫)项目,专注 分布式数据库 proxy 开发.座落与Client.DB Server(s)之间.对客户端透明.具有负载均衡.高可用性.sql过滤.读写分离 ...

随机推荐

  1. PTA | 1012 数字分类 (20分)

    给定一系列正整数,请按要求对数字进行分类,并输出以下 5 个数字: A1 = 能被 5 整除的数字中所有偶数的和: A2 = 将被 5 除后余 1 的数字按给出顺序进行交错求和,即计算 n1−n2+n ...

  2. 配置附加权限和LDAP

     配置附加权限和LDAP 补充:调整root的权限为rwx(读,写,执行) 步骤:采用数值形式将目录/root的权限调整为rwx------ 1)查看原来的权限 [root@svr7~]#ls -ld ...

  3. php--phpstorm使用正则匹配批量替换

    1.首先勾选正则规则 如图勾选右侧的Match Case和Regex 2.编写正则规则:无须添加//左右分解符,直接写正则表达式,注意应该转义的部分,需要原封不动替换的部分加上括号 3.编写替换规则: ...

  4. mysql 聚集函数 count 使用详解

    mysql 聚集函数 count 使用详解 本文将探讨以下问题 1.count(*) . count(n).count(null)与count(fieldName) 2.distinct 与 coun ...

  5. MTK Android 耳机线控的实现方法

    android 耳机线控的实现方法 keycodeonkeydownkeyevent 耳机线控的功能 耳机线控是一种很好用,并且能提升用户体验的功能.可以用来实现一些常用和基本的功能.比如:实现音乐播 ...

  6. C++ namespace 命名空间

    namespace即"命名空间",也称"名称空间" 那么这个 "名称空间" 是干啥的呢? 我们都知道,C/C++中的作用域可以由一个符号 { ...

  7. android所有颜色

    <?xml version="1.0" encoding="utf-8" ?> <resources> <color name=& ...

  8. String 对象-->判断是否相等

    1.定义和用法 == 值相等 === 绝对相等(值和类型都相等) 举例: var str = '8' var str1 = 8 console.log(str == str1) console.log ...

  9. 化繁为简,弱监督目标定位领域的新SOTA - 伪监督目标定位方法(PSOL) | CVPR 2020

    论文提出伪监督目标定位方法(PSOL)来解决目前弱监督目标定位方法的问题,该方法将定位与分类分开成两个独立的网络,然后在训练集上使用Deep descriptor transformation(DDT ...

  10. Java数组模拟环形队列

    2.环形队列 (上一篇队列:https://www.cnblogs.com/yxm2020/p/12676323.html) 百度百科 1.假溢出 ​ 系统作为队列用的存储区还没有满,但队列却发生了溢 ...