实现mysql的读写分离(mysql-proxy)

Mysql进阶之Mysql-proxy的读写分离 Mysql-proxy简介: mysql-proxy是官方提供的mysql中间件产品可以实现负载平衡,读写分离,failover等 MySQL Proxy就是这么一个中间层代理,简单的说,MySQL Proxy就是一个连接池,负责将前台应用的连接请求转发给后台的数据库,并且通过使用lua脚本,可以实现复杂的连接控制和过滤, 从而实现读写分离和负载平衡。对于应用来说,My... 阅读详情

mysql-proxy简介

MySQL读写分离是指让master处理写操作,让slave处理读操作,非常适用于读操作量比较大的场景,可减轻master的压力。

使用mysql-proxy实现mysql的读写分离,mysql-proxy实际上是作为后端mysql主从服务器的代理,它直接接受客户端的请求,对SQL语句进行分析,判断出是读操作还是写操作,然后分发至对应的mysql服务器上。
 mysql-proxy是官方提供的mysql中间件产品可以实现负载平衡,读写分离,failover等
 MySQL Proxy就是这么一个中间层代理,简单的说,MySQL Proxy就是一个连接池,负责将前台应用的连接请求转发给后台的数据库,并且通过使用lua脚本,可以实现复杂的连接控制和过滤,
  从而实现读写分离和负载平衡。对于应用来说,MySQL Proxy是完全透明的,应用则只需要连接到MySQL Proxy的监听端口即可。
  当然,这样proxy机器可能成为单点失效,但完全可以使用多个proxy机器做为冗余,在应用服务器的连接池配置中配置到多 个proxy的连接参数即可

在这里插入图片描述 从图中可以看到,SQL语句并不直接进入到master数据库或者slave数据库,而是进入到proxy,然后proxy判断这条语句是有关写的语句(包括insert、update、delete)还是读语句(select),当是写语句的时候,那么proxy将向master所在的服务器发出请求,同理,如果是读语句的时候,proxy将向slave所在的服务器发出请求。
在这里插入图片描述在这里插入图片描述server1上建立用户
在这里插入图片描述server2同步成功
在这里插入图片描述通过编写lua脚本实现读写分离

[root@server3 ~]# cd /usr/local/mysql-proxy/
[root@server3 mysql-proxy]# mkdir conf
[root@server3 mysql-proxy]# cd conf/
[root@server3 conf]# pwd
/usr/local/mysql-proxy/conf
[root@server3 conf]# vim ~./bash_profile    
		 10 PATH=$PATH:$HOME/bin:/usr/local/mysql-proxy/bin
[root@server3 conf]# source ~/.bash_profile 
[root@server3 conf]# cd ..
[root@server3 mysql-proxy]# mkdir logs
[root@server3 mysql-proxy]# cd conf/
[root@server3 conf]# vim mysql-proxy.conf
		  1 [mysql-proxy]
		  2 user=root   运行mysql-proxy用户
		  3 proxy-address=0.0.0.0:3306  
		  4 proxy-backend-addresses=172.25.44.1:3306 #指定后端主master写入数据
		  5 proxy-read-only-backend-addresses=172.25.44.2:3306  #指定后端从slave读取数据
		  6 proxy-lua-script=/usr/local/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua    #指定读写分离配置文件位置
		  7 log-file=/usr/local/mysql-proxy/logs/mysql-proxy.log    #日志位置
		  9 log-level=debug  #定义log日志级别,由高到低分别有(error|warning|info|message|debug)
		  10 daemon=true  #以守护进程方式运行
		  11 keepalive=true   #mysql-proxy崩溃时,尝试重启
[root@server3 logs]# cd /usr/local/mysql-proxy/share/doc/mysql-proxy/
[root@server3 conf]# mysql-proxy --defaults-file=/usr/local/mysql-proxy/conf/mysql-proxy.conf                                           
[root@server3 logs]# mysql-proxy --defaults-file=/usr/local/mysql-proxy/conf/mysql-proxy.conf
	2018-08-14 10:23:06: (critical) mysql-proxy-cli.c:326: loading config from '/usr/local/mysql-proxy/conf/mysql-proxy.conf' failed: permissions of /usr/local/mysql-proxy/conf/mysql-proxy.conf aren't secure (0660 or stricter required)
	2018-08-14 10:23:06: (message) Initiating shutdown, requested from mysql-proxy-cli.c:328
	2018-08-14 10:23:06: (message) shutting down normally, exit code is: 1
[root@server3 logs]# chmod 660 /usr/local/mysql-proxy/conf/mysql-proxy.conf
[root@server3 logs]# mysql-proxy --defaults-file=/usr/local/mysql-proxy/conf/mysql-proxy.conf
[root@server3 conf]# ps ax
		1555 ?        Ss     0:00 sshd: root@pts/1 
	 1557 pts/1    Ss+    0:00 -bash
		 1617 pts/0    R+     0:00 ps ax
[root@server3 conf]# /etc/init.d/mysqld stop
		Stopping mysqld:                                           [  OK  ]

[root@server3 conf]# ps ax
		 1662 ?        S      0:00 /usr/local/mysql-proxy/libexec/mysql-proxy --defaults
		 1663 ?        S      0:00 /usr/local/mysql-proxy/libexec/mysql-proxy --defaults
		 1664 pts/0    R+     0:00 ps ax
[root@server3 conf]# netstat -antlp
		tcp        0      0 0.0.0.0:3306                0.0.0.0:*                   LISTEN      1663/mysql-proxy   
	



[root@foundation44 ~]# mysql -h 172.25.44.3 -u root -p  #远程登陆测试,如果登陆不上,就在master端进行授权

在这里插入图片描述

MySQL [(none)]> use westos;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
MySQL [westos]> select * from userlist;
+----------+----------+
| username | password |
+----------+----------+
| userq    | 111      |
| user2    | 222      |
| user3    | 333      |
| user5    | 555      |
+----------+----------+
4 rows in set (0.00 sec)

[root@server1 ~]# mysql -pTing@666
mysql> insert into userlist values('user6','666');
	Query OK, 1 row affected (0.09 sec)

[root@foundation44 ~]# mysql -h 172.25.44.3 -u root -p 
MySQL [westos]> select * from userlist; #数据同步成功
+----------+----------+
| username | password |
+----------+----------+
| userq    | 111      |
| user2    | 222      |
| user3    | 333      |
| user5    | 555      |
| user6    | 666      |
+----------+----------+
5 rows in set (0.00 sec)



#在master上进行监控
[root@server1 ~]# yum install -y lsof
[root@server1 ~]# lsof -i :3306
	COMMAND  PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
	mysqld  1248 mysql   18u  IPv6   8560      0t0  TCP *:mysql (LISTEN)
	mysqld  1248 mysql   48u  IPv6   9242      0t0  TCP server1:mysql->server3:44918 (ESTABLISHED)
	mysqld  1248 mysql   50u  IPv6   9089      0t0  TCP server1:mysql->server2:37402 (ESTABLISHED)


在master上插入数据,多次远程连接,就会抓到
mysql> use westos;
mysql> insert into userlist values('user7','777');
Query OK, 1 row affected (0.08 sec)
mysql> insert into userlist values('user8','888');
Query OK, 1 row affected (0.17 sec)

[root@server1 ~]# lsof -i :3306
COMMAND  PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
		mysqld  1248 mysql   18u  IPv6   8560      0t0  TCP *:mysql (LISTEN)
		mysqld  1248 mysql   48u  IPv6   9242      0t0  TCP server1:mysql->server3:44918 (ESTABLISHED)
		mysqld  1248 mysql   49u  IPv6   9909      0t0  TCP server1:mysql->server3:44919 (ESTABLISHED)
		mysqld  1248 mysql   50u  IPv6   9089      0t0  TCP server1:mysql->server2:37402 (ESTABLISHED)
		mysqld  1248 mysql   52u  IPv6  10300      0t0  TCP server1:mysql->server3:44922 (ESTABLISHED)


#自动抓包
[root@server3 mysql-proxy]#     server default db: westos
	    client default db: 
	    syncronizing
	    server default db: westos
	    client default db: 
	    syncronizing
	    server default db: westos
	    client default db: 
	    syncronizing
[root@server3 conf]# pwd
		/usr/local/mysql-proxy/conf
[root@server3 conf]# vim mysql-proxy.conf

在这里插入图片描述

[root@server3 mysql-proxy]# mysql-proxy --defaults-file=/usr/local/mysql-proxy/conf/mysql-proxy.conf  --plugins=admin --plugins=proxy
[root@server3 mysql-proxy]# netstat -antlp  #会出现4041端口
		tcp        0      0 0.0.0.0:4041                0.0.0.0:*                   LISTEN      1753/mysql-proxy    
		tcp        0      0 0.0.0.0:3306                0.0.0.0:*                   LISTEN      1753/mysql-proxy 


#如果端口没有出现,执行以下操作:
[root@server3 mysql-proxy]# killall mysql-proxy
#重新刷新
[root@server3 mysql-proxy]# mysql-proxy --defaults-file=/usr/local/mysql-proxy/conf/mysql-proxy.conf  --plugins=admin --plugins=proxy


#远程登陆4041,,4041为管理员端口,3306为mysql-proxy与进行读写分离的两台mysql的主机进行直接通信的端口,如果使用mysql-proxy的默认端口,则必须在登陆时在后面加上 -P 4040

在这里插入图片描述
#检测读写分离

[root@server3 mysql-proxy]# vim rw-splitting.lua    #改变连接数,方便查看实验效果

在这里插入图片描述

在这里插入图片描述再次刷新连接,查看监控就会发现连接到slave端
在这里插入图片描述读的数据也是slave端的数据
在这里插入图片描述在这里插入图片描述但是写入数据时就会写在master端
在这里插入图片描述在这里插入图片描述
在这里插入图片描述

mysql-proxy + lua脚本 实现mysql的读写分离 1. 环境描述: 主服务器Master:172.25.254.1 从服务器Slave:172.25.254.2 调度服务器MySQL-Proxy:172.25.254.3 2. 首先在server1 server2 server3上配置mysql的基本环境,并在server1 server2上配置主从备份。过程不赘述。 3. mysql-proxy实现读写分离        实现读写分离是有... 阅读详情

相关推荐

32.1 基于MySQL Proxy实现读写分离

32.1 基于MySQL Proxy实现读写分离 MySQL Proxy是MySQL官方提供的中间层代理。可以基于MySQL Proxy实现MySQL数据库的读写分离,上层的应用程序只需要连接到MySQL Proxy监听的端口,而无须关注具体向哪个数据库写数据和向哪个数据库读数据。 32.1.1 服务器规划 本节用3台服务器实现MySQL的读写分离,服务器规划如表32-...

weixin_41275260的博客 129

MySQL数据库的读写分离(mysql-proxy)

一、什么是读写分离? MySQL读写分离是指让master处理写操作,让slave处理读操作,非常适用于读操作量比较大的场景,可减轻master的压力。 使用mysql-proxy实现mysql的读写分离,mysql-proxy实际上是作为后端mysql主从服务器的代理,它直接接受客户端的请求,对SQL语句进行分析,判断出是读操作还是写操作,然后分发至对应的mysql服务器上。 二、为什么要读...

Treasured ——的博客 787

IntelliJ IDEA 中git使用说明书

IntelliJ IDEA 中git使用说明书

junyang2012的博客 5389

Mysql(五)读写分离(mysql-proxy)

读写分离可以用很多软件实现:mysql-proxy 、MyCat 、Amoeba 在这里先演示proxy,其他下去自己看先看官网,官网没有el7版本的mysql-proxy,所以还是用6的 1.mysql数据库的读写分离的基础知识(为什么要进行读写分离) 对于很多大型网站(pv值百万、千万)来说,在所处理的业务中,其中有70%的业务是查询(select)相关的业务操作 (新闻网站,插入一条新...

yunyuzhu的博客 340

[技术解析]4DGS:突破实时动态渲染的4D高斯溅射技术

本文深入解析了4DGS(4D Gaussian Splatting)技术,它通过引入时间维度,将静态的3D高斯溅射升级为动态的4D表示,实现了对复杂动态场景的高质量实时渲染。该技术利用时空联合编码器与高斯形变场网络,结合多分辨率编码与差分溅射渲染,在VR/AR、高帧率游戏等领域展现出突破性的应用潜力,兼顾了渲染速度与画面稳定性。

weixin_29218509的博客 410

IPD实战指南:如何运用SPAN模型精准定位高潜力市场并优化资源配置

本文是IPD实战指南,详细解析了如何运用SPAN模型进行市场分析与战略决策。文章通过四步实战法,指导企业科学定义细分市场、量化评估吸引力与竞争力,并绘制矩阵以制定精准的资源配置策略,从而跳出红海竞争,将资源聚焦于高潜力市场。

weixin_29306317的博客 73

mysql prox配置_mysql-proxy配置

mysql-proxy配置【主库上】在已有主从同步配置的基础上增加log配置项,打开“全日志”功能。vim/etc/my.cnflog=mysqlfull.logservicemysqldrestartcat/var/lib/mysql/mysqlfull.log给mysqlproxy机器授权:grantallon*.*to'root'@'%'identifiedby'12...

weixin_39873741的博客 215

25届电信保研经验贴(空天院)

学校:中九专业:电子信息工程加权:92.89绩点:3.91/4.0rank:前五学期rank2/95,综合排名rank1(前六学期和综合排名出的晚,实际上只用到了前五学期)科研竞赛:市级大创、数模省一、数竞省二,其他校奖若干英语:六级462、四级548个人感觉:rank=科研>竞赛>英语总之rank和科研必须得有一项,要么就rank高,很多强com院校入营看rank。我rank比较有优势,因此报的多是强com院校。要么就科研经历丰富,多主动联系老师,特别是弱com院校。冬令营:空天院。

qq_68608661的博客 6333

数据库系列之MySQL基于MySQL-proxy实现读写分离

MySQL-proxy是mysql官方提供的mysql中间件服务,上游可接入若干个mysql-client,后端可连接若干个mysql-server。它使用mysql协议,通过lua脚本实现sql拦截与修改、性能分析与监控、读写分离和请求路由等功能。

牧羊人的方向 912

ADRC自抗扰算法优化(PLC梯形图篇)

ADRC自抗扰算法PLC梯形图完整源代码请参看下面博客文章:ADRC自抗扰控制算法(含梯形图完整源代码和算法公式)_adrc算法_RXXW_Dor的博客-优快云博客PLC的自抗扰控制(ADRC)算法_RXXW_Dor的博客-优快云博客_adrc算法1、自抗扰控制算法,网上很多文章有所讲解,大家也可以关注韩京清教授的论文和书籍,这里就不赘述了,下面给出梯形图+SCL代码。

RXXW_Dor的博客 2282

C++ int转四字节数组

字节转换

我不是码农的博客~~~ 972

基于proxy实现的mysql的读写分离

什么是读写分离? 读写分离,基本的原理是让主数据库处理事务性增、改、删操作(INSERT、UPDATE、DELETE),而从数据库处理SELECT查询操作。数据库复制被用来把事务性操作导致的变更同步到集群中的从数据库。 为什么要实现读写分离? 因为数据库的“写”(写10000条数据到oracle可能要3分钟)操作是比较耗时的。 但是数据库的“读”(从oracle读10000条数据可能只要5...

dreamer_xixixi的博客 2474

05 - matlab m_map地学绘图工具基础函数 - 设置比例尺指北针

本篇介绍下m_map中添加指北针(m_northarrow)、比例尺(m_ruler)和进行比例缩放(m_scale)的函数及其用法 。提供了 示例以便参考,罗列了 各函数可设属性。希望对绘图的你有所帮助。

weixin_43339605的博客 1945

利用mysql-proxy实现MySQL的读写分离

概述: 1.什么是读写分离? 读写分离,基本的原理是让主数据库处理事务性增、改、删操作(INSERT、UPDATE、DELETE),而从数据库处理SELECT查询操作。数据库复制被用来把事务性操作导致的变更同步到集群中的从数据库。 2.为什么要读写分离? 因为数据库的“写”(写10000条数据到oracle可能要3分钟)操作是比较耗时的。但是数据库的“读”(从oracle读10000条数据可能只...

luxunlx123的博客 323

成对使用离轴抛物面反射镜的设计

成对使用离轴抛物面反射镜的设计

weixin_72050316的博客 638

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

mysql proxy读写分离实现_使用mysql-proxy实现读写分离

mysql-proxy本身并不能进行读写分离,要实现读写分离要依赖于lua,所以要先查看是否安装了lua,如果没有安装使用yum install安装上即可~]# rpm -q lualua-5.1.4-4.1.el6.x86_64创建系统用户useradd -r mysql-proxy解压包创建链接文件tar zxf mysql-proxy-0.8.5-linux-el6-x86-64bit.ta...

weixin_35723352的博客 220

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

mysql-proxy实现读写分离

目录 一、工作拓扑 二、实验环境 三、配置主从复制 四、使用mysql-proxy 1、安装mysql-proxy 2、配置mysql-proxy,创建主配置文件 3、修改读写分离配置文件 4、启动mysql-proxy 5、测试读写分离 一、工作拓扑 MySQL Proxy有一项强大功能是实现“读写分离”,基本原理是让主数据库处理写方面事务,让从库处理SELECT查询。 Amoeba for MySQL是一款优秀的中间件软件,同样可以实现读写分离,负载均衡等功能,并且.

大道至简,持之以恒! 1753

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

mysql proxy 读写分离_mysql-proxy 实现读写分离

mysql-proxy 实现读写分离主服务器Master:192.168.179.146从服务器Slave:192.168.179.147调度服务器MySQL-Proxy:192.168.179.142下载mysql-proxy实现读写分离是有lua脚本实现的,现在mysql-proxy里面已经集成,无需再安装我这里以CentOS6 64位服务器为例安装mysql-proxy我这边为了方便使用 w...

weixin_30843553的博客 143

mysql的proxy机制实现读写分离_mysql-proxy 实现读写分离

【实验环境】平台 centos6.4IP分配192.168.30.101 node1 mysql-proxy192.168.30.102 node2 mysql主节点192.168.30.103 node3 mysql从节点192.168.30.104 node4 client注意:1、所有机器上都已编译安装好mysql5.52、实验的时候需要确保node2和node3的数据一致3、实验的时候需要...

weixin_32487557的博客 375

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

文章目录概述试验目的试验环境试验拓扑图注意试验背景准备环境安装操作系统安装MySQL配置MySQL的主从复制下载安装MySQL-Proxy下载MySQL-Proxy解压指定目录配置MySQL-Proxy创建必要的文件夹复制`rw-splitting.lua`文件到`conf`文件夹,并编辑新建并编辑配置文件为配置文件添加权限添加程序启动项到自启动文件测试启动功能测试结论其他还可以添加为环境变量(不是必须的)参考文献 概述 试验目的 验证、测试Linux系统下使用MySQL-Proxy实现MySQL的读写分离

weixin_41621706的博客 609

Mysql proxy实现读写分离

MySQL读写分离概念 MYSQL读写分离的原理其实就是让Master数据库处理事务性增、删除、修改、更新操作(CREATE、INSERT、UPDATE、DELETE),而让Slave数据库处理SELECT操作,MYSQL读写分离前提是基于MYSQL主从复制,这样可以保证在Master上修改数据,Slave同步之后,WEB应用可以读取到Slave端的数据。 读写分离实现方式 实现MYS...

小楼一夜听春雨,深巷明朝卖杏花 577

mysql proxy 读写分离_MySQL-Proxy实现MySQL读写分离

工作拓扑:MySQL Proxy有一项强大功能是实现“读写分离”,基本原理是让主数据库处理写方面事务,让从库处理SELECT查询。Amoeba for MySQL是一款优秀的中间件软件,同样可以实现读写分离,负载均衡等功能,并且稳定性也高于MySQL Proxy,有兴趣的可以测试一下。环境描述:操作系统:CentOS6.3_x64主服务器Master:192.168.0.202从服务器Slave:...

weixin_33502400的博客 188

mysql通过mysql-proxy实现读写分离

mysql通过mysql-proxy实现读写分离实验环境mysql读写分离的应用场景关闭mysql-proxy:安装mysql读写分离使用的包配置mysql-proxy建立log日志查看一下lua脚本并且修改给减小mysql-proxy.conf权限,启动 mysql-proxy检查mysql-proxy日志看节点是否添加成功授权用户进行测试关闭从库的slave功能打开从库的slave功能 实验环境 此实验基于半同步复制 前面做了主从复制, #注意: 如果server3之前做过mysql(要将server3

qq_43309149的博客 664

Mysql-proxy实现MySQL读写分离

之前写过ProxySQL实现MySQL数据库的读写分离,今天再来一个MySQL-Proxy实现MySQL的读写分离! 操作很简单! 实验环境: 防火墙关闭 主库:172.25.1.2 主机名:node2 从库:172.25.1.3 主机名:node3 主库和从库以实现基于GTID的主从复制! Mysql-proxy:172.25.1.5 主机名:node5 我用的包是mysql-proxy-0.8...

李笑男的博客 190
上一篇: mysql的主从复制,基于gtid的主从复制,半同步复制,组复制
下一篇: MHA实现mysql的高可用
小杨118709
博客等级 码龄8年 141粉丝 138原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值