MySQL Proxy实现数据的读写分离

做MySQL读写分离实验之前,先要搭建MySQL主从复制,可以参考我之前的两篇文章:

MySQL主从配置:http://msiyuetian.blog.51cto.com/8637744/1697288

部署搭建分层次LAMP架构(最后一章节):http://msiyuetian.blog.51cto.com/8637744/1740236

实现了主从复制后,下面我们进行读写分离的安装与配置。环境说明:

Linux发行版本:centos 6.7 x86_64 (三台)

Hostname
IP 备注
mysql-master 192.168.0.109 主MySQL
mysql-slaver 192.168.0.110 从MySQL
mysql-proxy 192.168.0.104 调度服务器

以下所有操若未特殊说明,都是在 mysql-proxy 机器上操作。

1、安装所需软件包

由于mysql-proxy实际上并不需要在本机上运行MySQL实例,所以这里用yum安装

[[email protected] ~]# yum install -y gcc gcc-c++ autoconf mysql-devel libtool pkgconfig ncurses ncurses-devel

2、安装libevent-2.0.22

[[email protected] ~]# cd /usr/local/src/

[[email protected] src]# wget https://github.com/libevent/libevent/releases/download/release-2.0.22-stable/libevent-2.0.22-stable.tar.gz

[[email protected] src]# tar xvf libevent-2.0.22-stable.tar.gz

[[email protected] src]# cd libevent-2.0.22-stable

[[email protected] libevent-2.0.22-stable]# ./configure

[[email protected] libevent-2.0.22-stable]# make

[[email protected] libevent-2.0.22-stable]# make install

3、安装glib-2.20.4

[[email protected] src]# wget http://ftp.gnome.org/pub/gnome/sources/glib/2.20/glib-2.20.4.tar.gz

[[email protected] src]# tar xvf glib-2.20.4.tar.gz

[[email protected] src]# cd glib-2.20.4

[[email protected] glib-2.20.4]# ./configure

[[email protected] glib-2.20.4]# make

[[email protected] glib-2.20.4]# make install

4、安装readline-6.1

[[email protected] src]# wget http://ftp.gnu.org/gnu/readline/readline-6.1.tar.gz

[[email protected] src]# tar xvf readline-6.1.tar.gz

[[email protected] src]# cd readline-6.1

[[email protected] readline-6.1]# ./configure

[[email protected] readline-6.1]# make

[[email protected] readline-6.1]# make install

[[email protected] readline-6.1]# ldconfig -v          //让动态链接库为系统所共享

5、安装 lua-5.1.4

[[email protected] src]# wget http://www.lua.org/ftp/lua-5.1.4.tar.gz

[[email protected] src]# tar xvf lua-5.1.4.tar.gz

[[email protected] src]# cd lua-5.1.4

[[email protected] lua-5.1.4]# vim src/Makefile        //64位系统需加上 -fPIC

CFLAGS= -O2 -Wall -fPIC $(MYCFLAGS)

[[email protected] lua-5.1.4]# make linux

[[email protected] lua-5.1.4]# make install

验证是否安装成功

[[email protected] lua-5.1.4]# /usr/local/lua/bin/lua

Lua 5.1.4  Copyright (C) 1994-2008 Lua.org, PUC-Rio

>

6、更改环境变量

[[email protected] lua-5.1.4]# cp etc/lua.pc /usr/local/lib/pkgconfig/

[[email protected] lua-5.1.4]# export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig

若版本为5.2以上则通过下面方式修改变量:

[[email protected] lua-5.2.3]# vim /etc/profile                              //添加如下


export LUA_CFLAGS="-I/usr/local/lua/include"

export LUA_LIBS="-L/usr/local/lua/lib-llua -ldl"

export LDFLAGS="-L/usr/local/libevent/lib -lm"

export CPPFLAGS="-I/usr/local/libevent/include"

export CFLAGS="-I/usr/local/libevent/include"

[[email protected] lua-5.2.3]# source /etc/profile


7、安装 mysql-proxy

[[email protected] src]# wget http://mirrors.sohu.com/mysql/MySQL-Proxy/mysql-proxy-0.8.4.tar.gz

[[email protected] src]# tar xvf mysql-proxy-0.8.4.tar.gz

[[email protected] src]# cd mysql-proxy-0.8.4

[[email protected] mysql-proxy-0.8.4]# ./configure -prefix=/usr/local/mysql-proxy

[[email protected] mysql-proxy-0.8.4]# make

[[email protected] mysql-proxy-0.8.4]# make install

[[email protected] mysql-proxy-0.8.4]# cp lib/rw-splitting.lua /usr/local/lib/

[[email protected] mysql-proxy-0.8.4]# cp lib/admin.lua /usr/local/lib/

8、新建配置文件

[[email protected] src]# vim /etc/mysql-proxy.cnf


[mysql-proxy]

admin-username = root

admin-password = 123456

admin-lua-script = /usr/local/lib/admin.lua

proxy-read-only-backend-addresses = 192.168.0.110

proxy-backend-addresses = 192.168.0.109

proxy-lua-script = /usr/local/lib/rw-splitting.lua

log-file = /var/log/mysql-proxy.log

log-level = debug

daemon = true

keepalive = true

[[email protected] src]# chmod 660 /etc/mysql-proxy.cnf

说明:


admin-username :指定登入的用户名

admin-password :指定登入的密码

admin-lua-script :指定由admin插件执行的脚本

proxy-address = <ip:port> :mysql-proxy服务端的监听端口,默认是4040,建议改成3306

proxy-read-only-backend-addresses = <ip:port> :指定只读slave的地址和端口,若有多个slave,以逗号分隔

proxy-backend-addresses = <ip:port> :指定远程master的地址和端口,若不指定默认是127.0.0.1:3306

proxy-lua-script :指定一个Lua脚本来控制mysql-proxy的运行和配置

defaults-file :指定mysql-proxy配置文件

log-file :指定日志文件

log-level :指定日志级别

daemon = true :指定mysql-proxy以守护进程方式运行

keepalive = true :开启该功能修正以前mysql-proxy容易死掉的bug

9、给用户授权

在主MySQL执行:

mysql> grant all privileges on *.* to ‘proxyuser‘@‘192.168.0.104‘ identified by ‘123456‘ with grant option;

在从MySQL执行:

mysql> grant all privileges on *.* to ‘proxyuser‘@‘192.168.0.104‘ identified by ‘123456‘ with grant option;

10、编辑读写分离脚本

[[email protected] src]# vim /usr/local/lib/rw-splitting.lua


找到:

min_idle_connections = 4,

max_idle_connections = 8,

改为:

min_idle_connections = 1,

max_idle_connections = 2,

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

11、启动mysql-proxy

[[email protected] src]# /usr/local/mysql-proxy/bin/mysql-proxy -P 192.168.0.104:3306 --defaults-file=/etc/mysql-proxy.cnf

12、测试读写分离

[[email protected] src]# netstat -lnp                                 //查看已启动 mysql-proxy 服务

[[email protected] src]# tail /var/log/mysql-proxy.log    //查看日志文件,如下表示成功


2016-04-14 22:32:11: (message) chassis-unix-daemon.c:136: [angel] we try to keep PID=56545 alive

2016-04-14 22:32:11: (debug) chassis-unix-daemon.c:157: waiting for 56545

2016-04-14 22:32:11: (debug) chassis-unix-daemon.c:121: we are the child: 56545

2016-04-14 22:32:11: (critical) plugin proxy 0.8.4 started

2016-04-14 22:32:11: (debug) max open file-descriptors = 1024

2016-04-14 22:32:11: (message) proxy listening on port 192.168.0.104:3306

2016-04-14 22:32:11: (message) added read/write backend: 192.168.0.109

2016-04-14 22:32:11: (message) added read-only backend: 192.168.0.110

注意:MySQL Proxy服务启动后,我们可以看到网站页面全是乱码,所以要将主从数据库的配置文件都要加上如下代码以避免这个问题

# vim /etc/my.cnf


[mysqld]

skip-character-set-client-handshake init-connect = ‘SET NAMES utf8‘

default-character-set = utf8

时间: 2024-10-19 03:07:17

MySQL Proxy实现数据的读写分离的相关文章

使用mysql proxy对数据库进行读写分离

服务器安排如下: 192.168.100.128 主 192.168.100.129 从 192.168.100.130 mysql-proxy 1.在100.130中下载安装mysql-proxy tar -zxvf mysql-proxy-0.8.5-linux-el6-x86-64bit.tar.gz cp mysql-proxy-0.8.5-linux-el6-x86-64bit /usr/local/mysql-proxy 2.配置环境变量 LUA_PATH="/usr/local/m

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

大型网站为了软解大量的并发访问,除了在网站实现分布式负载均衡,远远不够.到了数据业务层.数据访问层,如果还是传统的数据结构,或者只是单单靠一台服务器扛,如此多的数据库连接操作,数据库必然会崩溃,数据丢失的话,后果更是 不堪设想.这时候,我们会考虑如何减少数据库的联接,一方面采用优秀的代码框架,进行代码的优化,采用优秀的数据缓存技术如:memcached,如果资金丰厚的话,必然会想到假设服务器群,来分担主数据库的压力.Ok切入今天微博主题,利用MySQL主从配置,实现读写分离,减轻数据库压力.这种

MySQL/MariaDB基于MMM实现读写分离及高可用

前言 MMM(Master-Master replication managerfor Mysql,Mysql主主复制管理器)是一套灵活的脚本程序,基于perl实现,用来对mysql replication进行监控和故障迁移,并能管理mysql Master-Master复制的配置(同一时间只有一个节点是可写的). MMM 优缺点 优点:高可用性,扩展性好,出现故障自动切换,对于主主同步,在同一时间只提供一台数据库写操作,保证的数据的一致性. 缺点:Monitor节点是单点,可以结合Keepal

高可用架构篇--MyCat在MySQL主从复制基础上实现读写分离

点击链接加入群[Dubbo技术交流2群]:https://jq.qq.com/?_wv=1027&k=46DcDFI 一.环境 操作系统:CentOS-6.6-x86_64-bin-DVD1.iso JDK版本:jdk1.7.0_45 MyCat版本:Mycat-server-1.4-release-20151019230038-linux.tar.gz MyCat节点IP:192.168.1.203      主机名:edu-mycat-01  主机配置:4核CPU.4G内存 MySQL版本:

MySQL 数据库的主从复制与读写分离

在实际生产环境中,如果对数据库的读和写都在同一个数据库服务器中操作,无论是安全性.高可用性,还是高并发等各个方面都是完全不能满足实际需求的,因此,一般来说都是通过主从复制(Master-Slave)的方式来同步数据,再通过读写分离来提升数据库的并发负载能力这样的方案来进行部署与实施. MySQL 的主从复制和读写分离两者有着紧密关联,首先要部署主从复制,才能在此基础上进行数据的读写分离. MySQL 主从复制的复制类型1) 基于语句的数据.在主服务器上执行的 SQL 语句,在从服务器上执行同样的

mysql数据库多种备份及读写分离搭建

数据库的版本 1.社区版 2.企业版 3.集群版 数据库的安装 1.     专用软件包管理器(二进制) deb .rpm等 mysql                 MySQL客户端程序和共享库 mysql-server            MySQL服务器需要的相关程序 2.     源代码软件包(编译安装) configure.cmake 数据库常用的配置选项 -DCMAKE_INSTALL_PREFIX=/usr/local/mysql    ----指定残可安装路径(默认的就是/u

Spring和MyBatis实现数据的读写分离

1.Spring实现数据库的读写分离 现在大型的电子商务系统,在数据库层面大都采用读写分离技术,就是一个Master数据库,多个Slave数据库.Master库负责数据更新和实时数据查询,Slave库当然负责非实时数据查询.因为在实际的应用中,数据库都是读多写少(读取数据的频率高,更新数据的频率相对较少),而读取数据通常耗时比较长,占用数据库服务器的CPU较多,从而影响用户体验.我们通常的做法就是把查询从主库中抽取出来,采用多个从库,使用负载均衡,减轻每个从库的查询压力. 采用读写分离技术的目标

MySQL和MariaDB 备份 主从 读写分离

查询缓存: 如何判断是否命中: 通过查询语句的哈希值判断:哈希值考虑的因素包括 查询本身.要查询的数据库.客户端使用协议版本,... 查询语句任何字符上的不同,都会导致缓存不能命中: 哪此查询可能不会被缓存? 查询中包含UDF.存储函数.用户自定义变量.临时表.mysql库中系统表.或者包含列级权限的表.有着不确定值的函数(Now()); 查询缓存相关的服务器变量: query_cache_min_res_unit: 查询缓存中内存块的最小分配单位: 较小值会减少浪费,但会导致更频繁的内存分配操

Mysql之主从模式、读写分离概念

MySQL主从架构复制: 在主server上每次进行可能引起数据变化的操作都要先记录到二进制文件中,并将数据同步到主server的磁盘上,与此同时还要通过端口(3306)将二进制日志发送到从server上,在从server上,从server会先将接受的二进制日志保存为中继日志(relay log),在从中继日志中进行读取,重新执行一遍操作,进行数据的复制 但一般来说,如果主server有多个cpu,当数据量变化很频繁时,可能会在每个cpu上都运行一个事务,而注server只能一个个的记录入二进制