1、MySQL的安装与配置 --省略

版本:Server version: 5.6.35

1.1 系统版本:

[root@centos7-67 package]# lsb_release -a

LSB Version: :core-4.1-amd64:core-4.1-noarch

Distributor ID: CentOS

Description: CentOS Linux release 7.2.1511 (Core)

Release: 7.2.1511

Codename: Core

2、场景描述

数据库Master主服务器:192.168.1.83

数据库Slave从服务器:192.168.1.66

MySQL-Proxy调度服务器:192.168.1.67

以下操作,均是在192.168.1.67即MySQL-Proxy调度服务器 上进行的。

配置主从复制,并在192.168.1.66上开启 start slave;

MySQL-Proxy上安装所需软件包

yum install -y gcc* gcc-c++* autoconf* automake* zlib* libxml* ncurses-devel* libmcrypt* libtool* flex* pkgconfig* libevent* glib* readline-devel*

  

3、编译安装lua

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

下载:

从http://www.lua.org/download.html下载源码包

wget http://www.lua.org/ftp/lua-5.3.4.tar.gz

3.1  tar xf lua-5.3.4.tar.gz

3.2  cd lua-5.3.4

3.3  vi src/Makefile

CFLAGS= -O2 -Wall -fPIC -Wextra -DLUA_COMPAT_5_2 $(SYSCFLAGS) $(MYCFLAGS)

3.4   make linux

3.5   make install

下载:https://downloads.mysql.com/archives/get/file/mysql-proxy-0.8.5-linux-glibc2.3-x86-64bit.tar.gz

4、tar xf mysql-proxy-0.8.5-linux-glibc2.3-x86-64bit.tar.gz

5、mv mysql-proxy-0.8.5-linux-glibc2.3-x86-64bit /usr/local/mysql-proxy

6、cd /usr/local/mysql-proxy

7、mkdir lua #创建脚本存放目录

mkdir logs #创建日志目录

8、cp share/doc/mysql-proxy/rw-splitting.lua ./lua #复制读写分离配置文件

9、cp share/doc/mysql-proxy/admin-sql.lua ./lua #复制管理脚本

10、vi /etc/init.d/mysql-proxy   #创建mysql-proxy服务管理脚本

[root@centos7-67 ~]# cat /etc/init.d/mysql-proxy
#!/bin/sh
# mysql-proxy This script starts and stops the mysql-proxy daemon
#
# chkconfig: - 78 30
# processname: mysql-proxy
# description: mysql-proxy is a proxy daemon to mysql
# Source function library.
. /etc/rc.d/init.d/functions
#PROXY_PATH=/usr/local/bin
PROXY_PATH=/usr/local/mysql-proxy/bin
prog="mysql-proxy"
# Source networking configuration.
. /etc/sysconfig/network
# Check that networking is up.
#[ ${NETWORKING} == "no" ] && exit 0
# Set default mysql-proxy configuration. PROXY_OPTIONS="--log-level=info \
--log-file=/var/log/mysql-proxy.log \
--plugins=proxy -b 192.168.1.83:3306 -r 192.168.1.66:3306 \
--proxy-lua-script=/usr/local/mysql-proxy/lua/rw-splitting.lua \
--plugins=admin --admin-username=admin \
--admin-password=admin \
--admin-lua-script=/usr/local/mysql-proxy/lib/mysql-proxy/lua/admin.lua" PROXY_PID=/usr/local/mysql-proxy/mysql-proxy.pid
# Source mysql-proxy configuration. if [ -f /etc/sysconfig/mysql-proxy ]; then . /etc/sysconfig/mysql-proxy fi
PATH=$PATH:/usr/bin:/usr/local/bin:$PROXY_PATH
# By default it's all good
RETVAL=0 # See how we were called.
case "$1" in
start)
# Start daemon.
echo -n $"Starting $prog: "
$NICELEVEL $PROXY_PATH/mysql-proxy $PROXY_OPTIONS --daemon --pid-file=$PROXY_PID --user=mysql
RETVAL=$?
echo
if [ $RETVAL = 0 ]; then
touch /var/lock/subsys/mysql-proxy
fi
;;
stop)
# Stop daemons.
echo -n $"Stopping $prog: "
killproc $prog
RETVAL=$?
echo
if [ $RETVAL = 0 ]; then
rm -f /var/lock/subsys/mysql-proxy
rm -f $PROXY_PID
fi
;;
restart)
$0 stop
sleep 3
$0 start
;;
condrestart)
[ -e /var/lock/subsys/mysql-proxy ] && $0 restart
;;
status)
status mysql-proxy
RETVAL=$?
;;
*)
echo "Usage: $0 {start|stop|restart|status|condrestart}"
RETVAL=1
;;
esac
exit $RETVAL

  11、脚本更改说明:

PROXY_PATH=/usr/local/mysql-proxy/bin//定义mysql-proxy

  服务二进制文件路径

--proxy-read-only-backend-addresses=192.168.1.66:3306

  定义从服务器可读

--proxy-backend-addresses=192.168.1.83:3306

  定义主服务器可写 --proxy-lua-script=/usr/local/mysql-proxy/lua/rw-splitting.lua"//定义lua读写分离脚本路径

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

--daemon  //定义以守护进程模式启动

--keepalive //使进程在异常关闭后能够自动恢复

--pid-file=$PROXY_PID  //定义mysql-proxy PID文件路径

--user=mysql  //以mysql用户身份启动服务

--log-level=warning  //定义log日志级别,由高到低分别有(error|warning|info|message|debug)

--log-file=/usr/local/mysql-proxy/logs/mysql-proxy.log //定义log日志文件路径

12、chmod 755  /etc/init.d/mysql-proxy

13、vi /usr/local/mysql-proxy/lua/rw-splitting.lua //修改读写分离脚本//修改默认连接,进行快速测试,不修改的话要达到连接数为4时才启用读写分离

-- connection pool
if not proxy.global.config.rwsplit then
proxy.global.config.rwsplit = {
min_idle_connections = 1,//默认为4
max_idle_connections = 1,//默认为8 is_debug = false
}
end

  14、启动mysql-proxy

/etc/init.d/mysql-proxy start

  15、启动成功:

[root@centos7-67 ~]# netstat -nutlp| grep mysql
tcp 0 0 0.0.0.0:4040 0.0.0.0:* LISTEN 18520/mysql-proxy
tcp 0 0 0.0.0.0:4041 0.0.0.0:* LISTEN 18520/mysql-proxy

  16、测试读写分离效果

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

登陆主数据库服务器192.168.1.83,通过命令行登录管理MySQL服务器

mysql>  GRANT ALL ON *.* TO 'proxy1'@'192.168.1.67' IDENTIFIED BY 'password';

由于我们配置了主从复制功能,因此从数据库服务器172.16.1.66上已经同步此操作。

为了清晰的看到读写分离的效果,需要暂时关闭MySQL主从复制功能;线上是需要主从同步的,这里只是做实验测试,需要关闭

登录从数据库服务器192.168.1.66

关闭Slave同步进程

mysql> stop slave;

连接到mysql-proxy

[root@centos7-67 ~]# mysql -uproxy1 -p'password' -P4040 -h192.168.1.67

  插入2条数据

mysql> insert into t1 values (120,'third');
Query OK, 1 row affected (0.02 sec) mysql> insert into t1 values (121,'for');
Query OK, 1 row affected (0.01 sec)

  

验证:

mysql-proxy:

mysql> select * from t1; //没有看到数据

master:

mysql> select * from t1; //可以看到数据

slave:

mysql> select * from t1; //没有看到数据

连接管理端口:

[root@centos7-67 ~]# mysql -uadmin -padmin -h192.168.1.67 -P4041

mysql> SELECT * FROM backends;

+-------------+-------------------+-------+------+------+-------------------+

| backend_ndx | address           | state | type | uuid | connected_clients |

+-------------+-------------------+-------+------+------+-------------------+

|           1 | 192.168.1.83:3306 | up    | rw   | NULL |                 0 |

|           2 | 192.168.1.66:3306 | up    | ro   | NULL |                 0 |

+-------------+-------------------+-------+------+------+-------------------+

2 rows in set (0.00 sec)

up:表示读写分离生效;unKnown:还没生效

结论:当在mysql-proxy插入数据时,写入到了master上,查询数据是从slave上查看,所以查询不到数据。当在slave上插入数据,在mysql-proxy上可以看到,说明读是从slave上,写是在master上。

mysql-proxy读写分离笔记的更多相关文章

  1. Linux MySQL Proxy 读写分离

    导读 因为读写分离是建立在MySQL集群主从复制的基础上,还不了解的,先看我另一篇博客:点我直达 MySQL-Proxy简介 mysql-proxy是mysql官方提供的mysql中间件服务,上游可接 ...

  2. MySQL的读写分离的几种选择

    MySQL的读写分离的几种选择 MySQL主从复制(Master-Slave)与读写分离(MySQL-Proxy)实践 原址如下: http://heylinux.com/archives/1004. ...

  3. Amoeba搞定mysql主从读写分离

    前言:一直想找一个工具,能很好的实现mysql主从的读写分离架构,曾经试用过mysql-proxy发现lua用起来很不爽,尤其是不懂lua脚本,突然发现了Amoeba这个项目,试用了下,感觉还不错,写 ...

  4. Amoeba实现mysql主从读写分离

    Amoeba实现mysql主从读写分离 这段在网上看了下关于amoeba的文章,总体感觉好像要比mysql-proxy好的多,也参考了不少的资料,此文章可能与其他文章作者会有雷同的地方,请谅解,但是此 ...

  5. python实现mysql的读写分离及负载均衡

    Oracle数据库有其公司开发的配套rac来实现负载均衡,目前已知的最大节点数能到128个,但是其带来的维护成本无疑是很高的,并且rac的稳定性也并不是特别理想,尤其是节点很多的时候. 但是,相对my ...

  6. MySQL ProxySQL读写分离实践

    目的 在上一篇文章MySQL ProxySQL读写分离使用初探里初步介绍了ProxySQL的使用,本文继续介绍它的一些特点和DBProxy的性能差异.深入一些去了解ProxySQL,通过测试来说明Pr ...

  7. MySQL Router实现MySQL的读写分离

    1.简介 MySQL Router是MySQL官方提供的一个轻量级MySQL中间件,用于取代以前老版本的SQL proxy. 既然MySQL Router是一个数据库的中间件,那么MySQL Rout ...

  8. 搭建基于MySQL的读写分离工具Amoeba

    搭建基于MySQL的读写分离工具Amoeba: Amoeba工具是实现MySQL数据库读写分离的一个工具,前提是基于MySQL主从复制来实现的: 实验环境(虚拟机): 主机 角色 10.10.10.2 ...

  9. MySQL/MariaDB读写分离配置

    DB读写分离描述 数据库的读写分离其实就是为了加减少数据库的压力:数据库的写入操作由主数据库来进行,读取操作由从数据库来进行操作.实现数据库读写分离技术是有很多方法的,在这里我就用一个比较简单的mys ...

  10. 使用mysql-proxy实现mysql的读写分离

     前言: MySQL读写分离是指让master处理写操作,让slave处理读操作,非常适用于读操作量比较大的场景,可减轻master的压力.使用mysql-proxy实现mysql的读写分离,mysq ...

随机推荐

  1. Mac OS备份迁移iBooks图书操作方法

    前段时间换电脑,需要把原本电脑上的一些文件备份.迁移出来,包括iBooks中的电子书. 理论上,苹果体系中通过icloud账号可以把通讯录.备忘录等东西同步过去,但查了一下发现图书支持有限,而且我的e ...

  2. Deepin15.11源码安装Nginx17.5包括stream模块和njs模块

    一:先到官网下载nginx-1.17.5.tar.gz包并且解压到当前目录,解压后目录为:nginx-1.17.5: 二:下载njs源码(它没有像stream模块一样附带在了nginx源码里),因此首 ...

  3. [转帖]reptyr, 将正在运行的程序转换为新终端

    reptyr, 将正在运行的程序转换为新终端 https://www.helplib.com/GitHub/article_45241 学习一下. 很抑郁的是 没有 arm64和龙芯平台的二进制文件. ...

  4. day42——外键的限制和解决方法、外键的三种约束模式、修改表(单表查询)

    day42 外键的限制和解决方法 可以添加外键关联的那个字段可以是 被唯一(unique)约束的字段 或者 主键 限制:+ 由于外键的使用,致使多个表之间产生了联系,当我们对这些表进行更新或删除操作的 ...

  5. github上热门深度学习项目

    github上热门深度学习项目 项目名 Stars 描述 TensorFlow 29622 使用数据流图进行可扩展机器学习的计算. Caffe 11799 Caffe:深度学习的快速开放框架. [Ne ...

  6. xorm-Iterate/Count/Rows方法实例

    package main import ( "fmt" _ "github.com/go-sql-driver/mysql" "github.com/ ...

  7. git clone一个仓库下的单个文件【记录】

    注意:本方法会下载整个项目,但是,最后出现在本地项目文件下里只有需要的那个文件夹存在.类似先下载,再过滤. 有时候因为需要我们只想gitclone 下仓库的单个或多个文件夹,而不是全部的仓库内容,这样 ...

  8. [LOJ3086] [GXOI2019] 逼死强迫症

    题目链接 LOJ:https://loj.ac/problem/3086 洛谷:https://www.luogu.org/problemnew/show/P5303 Solution 显然不考虑\( ...

  9. Kubernetes1.11.1 使用Nvidia显卡配置方法

    一.安装 1.1.kubernetes硬件支持问题说明 Kubernetes目前主要在很小程度上支持CPU和内存的发现.Kubelet本身处理的设备非常少.Kubernetes对于硬件都使用都依赖于硬 ...

  10. JAVA MyBybatis分页

    java: import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; impo ...