Mysql-proxy 实现读写分离

背景:如下图所示,主要通过mysql-proxy实现对两台mysql服务器的读写分离操作,两台mysql提供的测试数据库内容一致(这里主要通过手工同步两台mysql测试数据库的内容,没有使用mysql主从,主要是方便测试)

一、环境软件

1、 安装pkg-config

[[email protected] srv]yum install pkgconfig

2、安装glib2

[[email protected] src]yum install glib2

3、安装 libevent
[[email protected] srv]tar zxvf libevent-1.4.14b-stable.tar.gz
[[email protected] libevent-2.0.22-stable]./configure --prefix=/usr/local/libevent
[[email protected] libevent-2.0.22-stable]make
[[email protected] libevent-2.0.22-stable]make install

4、安装mysql-devel(只需安装mysql开发包)

[[email protected] src]yum install mysql-devel

5、LUA

yum install -y readline-devel ncurses-devel

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

[[email protected] src]#tar -zxvf lua-5.3.1.tar.gz

[[email protected] lua-5.3.1]# vim Makefile

INSTALL_TOP= /usr/local/lua

[[email protected] lua-5.3.1]make linux

[[email protected] lua-5.3.1]make install

如果你的服务器是64位的,这时要调整一下Makefile:vi src/Makefile,在CFLAGS里加上-fPIC,否则会出错

6、设置mysql-proxy运行的环境变量

Vim /etc/profile

export LUA_CFLAGS="-I/usr/local/lua/include" LUA_LIBS="-L/usr/local/lua/lib -llua -ldl" LDFLAGS="-L/usr/local/libevent/lib -lm"

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

export PKG_CONFIG_PATH=/usr/lib/pkgconfig  #rpm -ql pkgconfig查看其安装路径

然后执行 source /etc/profile

二、Mysql-proxy安装

Wget ftp://mirror.switch.ch/mirror/mysql/Downloads/MySQL-Proxy/mysql-proxy-0.8.4.tar.gz

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

./configure --prefix=/usr/local/mysql-proxy --with-lua

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

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

设置mysql-proxy环境变量

Vim /etc/profile

export PATH=$PATH:/usr/local/mysql-proxy/bin

Source /etc/profile

查看安装信息

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

mysql-proxy 0.8.4

chassis: 0.8.4

glib2: 2.28.8

libevent: 2.0.22-stable

LUA: Lua 5.1.4

package.path: /usr/local/mysql-proxy/lib/mysql-proxy/lua/?.lua

package.cpath: /usr/local/mysql-proxy/lib/mysql-proxy/lua/?.so

-- modules

proxy: 0.8.4

三、mysql-proxy读写分离测试

1、读,写数据库信息一致

2、在192.168.1.121和192.168.1.124对mysql-proxy授权

mysql> grant all on jiang.* to ‘proxyuser‘@‘192.168.1.120‘ identified by ‘jiang‘;

3、配置mysql-proxy,实现读写分离(后台启动该程序&)

mysql-proxy --proxy-read-only-backend-addresses=192.168.1.124:3306

--proxy-backend-addresses=192.168.1.121:3306

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

[[email protected] lib]# netstat -an | grep 4040     //确保已经启动了mysql-proxy

tcp        0      0 0.0.0.0:4040                0.0.0.0:*                   LISTEN

vim /usr/local/mysql-proxy/lib/rw-splitting.lua

proxy.global.config.rwsplit = {

min_idle_connections = 1,

max_idle_connections = 2,

is_debug = false

}

说明:这是因为mysql-proxy会检测客户端连接, 当连接没有超过min_idle_connections预设值时, 不会进行读写分离, 即查询操作会发生到Master上(可通过show processlist查询连接情况)

参数说明:

--proxy-read-only-backend-addresses=192.168.1.124:3306 \ //定义后端只读从服务器地址
--proxy-backend-addresses=192.168.1.121:3306 \ //定义后端主服务器地址
--proxy-lua-script=/usr/local/mysql-proxy/lib/rw-splitting.lua" \ //定义lua读写分离脚本路径

4、远程连接mysql-proxy

[[email protected] lib]# mysql -uproxyuser -pjiang -h192.168.1.120 -P4040

5、插入数据,分析读写情况

mysql> INSERT INTO `jiang`.`personal_info` (`pi_id` ,`pi_name` ,`pi_tel` ,`pi_qq` ,`pi_email`)

VALUES (‘2‘, ‘mysqlproxy‘, ‘111111111111‘, ‘22222222‘, ‘[email protected]‘);

5.1 此次检查192.168.1.121和192.168.1.124的数据库jiang的情况。

192.168.1.121:如下数据

192.168.1.124:如下数据

说明:在192.168.1.120 mysql-proxy上,写的数据在192.168.1.121,而192.168.1.124没有写入数据。

接下来,为了实现分离状态的查看,需要重新打开客户端重新连接mysql-proxy,如下所示

[[email protected] ~]# mysql -uproxyuser -pjiang -h192.168.1.120 -P4040

如下所示,表示读取的数据库,那么该数据中并没有新插入的数据,其原因在于此时读取的数据在192.168.1.124上,而根据测试环境,192.168.1.124为只读数据库,所以插入的数据并没有写入到192.168.1.124上。

时间: 2024-09-29 17:42:57

Mysql-proxy 实现读写分离的相关文章

MySQL主从(MySQL proxy Lua读写分离设置,一主多从同步配置,分库分表方案)

Mysql Proxy Lua读写分离设置 一.读写分离说明 读写分离(Read/Write Splitting),基本的原理是让主数据库处理事务性增.改.删操作(INSERT.UPDATE.DELETE),而从数据库处理SELECT查询操作.数据库复制被用来把事务性操作导致的变更同步到集群中的从数据库. 1.设置说明 Master服务器: 192.168.41.196 Slave服务器: 192.168.41.197 Proxy服务器: 192.168.41.203 2.安装Mysql Pro

Windows操作系统下的MySQL主从复制及读写分离

一.主服务器(master)配置 1.修改MySQL配置文件my.ini [mysqld] log-bin=mysql-binlog-bin-index=mysql-bin.indexserver-id=1sync_binlog=1binlog_format=mixedbinlog-do-db=testbinlog-ignore-db=mysqlbinlog-ignore-db=performance_schemabinlog-ignore-db=information_schema 配置完成后

mysql主从复制与读写分离

MySQL主从复制与读写分离 MySQL主从复制(Master-Slave)与读写分离(MySQL-Proxy)实践 Mysql作为目前世界上使用最广泛的免费数据库,相信所有从事系统运维的工程师都一定接触过.但在实际的生产环境中,由单台Mysql作为独立的数据库是完全不能满足实际需求的,无论是在安全性,高可用性以及高并发等各个方面. 因此,一般来说都是通过 主从复制(Master-Slave)的方式来同步数据,再通过读写分离(MySQL-Proxy)来提升数据库的并发负载能力 这样的方案来进行部

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

一.Amoeba 是什么 Amoeba(变形虫)项目,专注 分布式数据库 proxy 开发.座落与Client.DB Server(s)之间.对客户端透明.具有负载均衡.高可用性.sql过滤.读写分离.可路由相关的query到目标数据库.可并发请求多台数据库合并结果. 主要解决: ? 降低 数据切分带来的复杂多数据库结构 ? 提供切分规则并降低 数据切分规则 给应用带来的影响 ? 降低db 与客户端的连接数 ? 读写分离 二.为什么要用Amoeba 目前要实现mysql的主从读写分离,主要有以下

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

   MySQL从5.5版本开始,通过./configure进行编译配置方式已经被取消,取而代之的是cmake工具.因此,我们首先要在系统中源码编译安装cmake工具. 注:安装前须查看是否已经安装了如下依赖包,如果没有请安装. apt-get -y install gcc g++ libncurses5-dev ncurses-devel openssl 一.主库安装及配置 1.源码安装cmake # tar xf cmake-3.0.0.tar.gz # cd cmake-3.0.0 # .

Mysql 主从复制,读写分离

Mysql 主从复制及读写分离 特别推荐看:amoeba.xml 的配置部分,在百度上看了很多配置都不完整,是我测试时的痛点 实验的目的: 有两部分:第一实现Mysql主从复制,第二实现读写分离. 下面是实验的环境: 192.168.58.11     安装了amoeba 的节点 192.168.58.16      master    系统:rhel 5.4 192.168.58.12      slave     系统: rhel 5.4 192.168.58.11      代理     

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

实验系统:CentOS 6.6_x86_64 实验前提:防火墙和selinux都关闭 实验说明:本实验共有4台主机,IP分配如拓扑 实验软件:mariadb-10.0.20 oneproxy-rhel5-linux64-v5.6-ga 下载地址:http://pan.baidu.com/s/1jGpL2o2 实验拓扑: 注意:本实验是之前mysql-proxy实验的拓展,因此大部分环境及设定是相同的,其中一.二步这里不再重复,具体请参考:利用mysql-proxy进行mysql数据库的读写分离

Mysql主从配置+读写分离

Mysql主从配置+读写分离     MySQL从5.5版本开始,通过./configure进行编译配置方式已经被取消,取而代之的是cmake工具.因此,我们首先要在系统中源码编译安装cmake工具. 注:安装前须查看是否已经安装了如下依赖包,如果没有请安装. apt-get -y install gcc g++ libncurses5-dev ncurses-devel openssl   一.主库安装及配置 1.源码安装cmake # tar xf cmake-3.0.0.tar.gz #

Mysql主从复制、读写分离工作原理+配置

Mysql的 Replication 是一个异步的复制过程,从一个 Mysql instace(我们称之为 Master)复制到另一个 Mysqlinstance(我们称之 Slave).在 Master 与 Slave 之间的实现整个复制过程主要由三个线程来完成,其中两个线程(Sql线程和IO线程)在 Slave 端,另外一个线程(IO线程)在 Master 端. MySQL 复制的基本过程如下: 1. Slave 上面的IO线程连接上 Master,并请求从指定日志文件的指定位置(或者从最开

MySQL 主从复制与读写分离

Mysql主从复制作用原理 1.在业务复杂的系统中,有这么一个情景,有一句sql语句需要锁表,导致暂时不能使用读的服务,那么就很影响运行中的业务,使用主从复制,让主库负责写,从库负责读,这样,即使主库出现了锁表的情景,通过读从库也可以保证业务的正常运作.2.做数据的热备3.架构的扩展.业务量越来越大,I/O访问频率过高,单机无法满足,此时做多库的存储,降低磁盘I/O访问的频率,提高单个机器的I/O性能.mysql主从复制是一个异步的复制过程,主库发送更新事件到从库,从库读取更新记录,并执行更新记