首页 > 数据库 >mysql proxy实现读写分离

mysql proxy实现读写分离

时间:2023-06-21 15:01:18浏览次数:54  
标签:log 读写 proxy mysql local usr

Mysql-proxy实现读写分离

目录

环境说明

环境说明

Mysql-proxy简介

mysql-proxy是官方提供的mysql中间件产品可以实现负载平衡,读写分离,failover等
MySQL Proxy就是这么一个中间层代理,简单的说,MySQL Proxy就是一个连接池,负责将前台应用的连接请求转发给后台的数据库,并且通过使用lua脚本,可以实现复杂的连接控制和过滤,从而实现读写分离和负载平衡。对于应用来说,MySQL Proxy是完全透明的,应用则只需要连接到MySQL Proxy的监听端口即可。

当然,这样proxy机器可能成为单点失效,但完全可以使用多个proxy机器做为冗余,在应用服务器的连接池配置中配置到多 个proxy的连接参数即可。

proxy

从图中可以看到,SQL语句并不直接进入到master数据库或者slave数据库,而是进入到 proxy,然后proxy判断这条语句是有关写的语句(包括insert、update、delete)还 是读语句(select),当是写语句的时候,那么proxy将向master所在的服务器发出请 求,同理,如果是读语句的时候,proxy将向slave所在的服务器发出请求。

应用背景:在开发工作中,有时候会遇见某个sql 语句需要锁表,导致暂时不能使用读的服务,这样就会影响现有业务,使用主从复制,让主库负责写,从库负责读,这样即使主库出现了锁表的情景,通过读从库也可以保证业务的正常运作。

部署mysql-proxy服务

1.部署前先部署好117/118的主从架构

2.在116上部署mysql-proxy

tar -zxvf mysql-proxy-0.8.5-linux-el6-x86-64bit.tar.gz -C /usr/local
mv mysql-proxy-0.8.5-linux-el6-x86-64bit mysql-proxy

3.创建配置文件(注意:这里必须要将所有的注释删除掉,不然启动会报错)

vi /etc/mysql-proxy.conf
[mysql-proxy]
proxy-address=0.0.0.0:3306
proxy-backend-addresses=192.168.1.118:3306
proxy-read-only-backend-addresses=192.168.1.117:3306
proxy-lua-script=/usr/local/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua
pid-file=/usr/local/mysql-proxy/log/mysql-proxy.pid
log-file=/usr/local/mysql-proxy/log/mysql-proxy.log
plugins=proxy
log-level=debug
keepalive=true
daemon=true


参数说明:
[mysql-proxy]
proxy-address=0.0.0.0:3306	#监听本机中所有IP的端口。
proxy-backend-addresses=172.25.60.1:3306	#进行写的数据库server1
proxy-read-only-backend-addresses=172.25.60.2:3306	
proxy-lua-script=/usr/local/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua
pid-file=/usr/local/mysql-proxy/log/mysql-proxy.pid    #pid文件
log-file=/usr/local/mysql-proxy/log/mysql-proxy.log    #生成日志文件
plugins=proxy    #proxy插件
log-level=debug    #日志等级为debug
keepalive=true     #心跳检测
daemon=true        #守护进程

创建目录

mkdir /usr/local/mysql-proxy/log
  1. 通过修改lua脚本实现读写分离
    修改lua脚本,默认超过4个连接才会启用读写分离,改为超过2个连接启用读写分离
vim /usr/local/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua
min_idle_connections = 1,
max_idle_connections = 2,

lua

5.启动mysql-proxy
在启动前我们需要为配置文件加上660权限,没有修改权限,则会报错

chmod 660 /etc/mysql-proxy.conf
/usr/local/mysql-proxy/bin/mysql-proxy --defaults-file=/etc/mysql-proxy.conf

6.测试远程登录mysql-proxy服务端能否同步
如下的IP为proxy主机的IP,测试是否可以直接通过该ip连接

mysql -h 192.168.1.119 -uroot -proot

读写分离测试

测试方式:
关闭主从复制,然后多建立几个连接,一个写,其他的读,可以看到读到的内容和写的内容是不一致的时候就说明读写分离测试成功了。

总结

读写分离存在的弊端
因为架构是主从架构,那么久无法保证主备数据库没有延迟,如果有大批量的数据操作的话,那么备库可能出现较大的延迟,那么这时候的读操作就可能出现数据和主库不一致的情况。

标签:log,读写,proxy,mysql,local,usr
From: https://www.cnblogs.com/xulinforDB/p/17496228.html

相关文章

  • MySQL性能压测工具SysBench详解(非常详细)
    MySQL性能压测工具SysBench详解(非常详细)概述掌握数据库的性能情况是非常必要的。本文介绍了MySQL基准测试的基本概念,以及使用sysbench对MySQL进行基准测试的详细方法;基准测试与压力测试简介1、什么是基准测试数据库的基准测试是对数据库的性能指标进行定量的、可复现的、可......
  • mycat分库分表和读写分离
    1.mycat分库分表和读写分离目录1.mycat分库分表和读写分离1.1.分库分表实现1.1.1.Mycat安装与配置详解1.1.1.1.下载地址1.1.1.2.解压安装包1.1.2.修改mycat内存配置1.1.3.配置实例1.1.4.环境准备1.1.4.1.分库分表规则1.1.4.2.创建数据库和表结构1.1.4.3.配置conf文件......
  • mysql的用户和权限管理
    1.mysql用户和权限管理目录1.mysql用户和权限管理1.1.常用授权语句1.1.1.5.7以及以前的版本1.1.1.1.存储过程权限管理1.1.2.8.0的版本:1.1.3.删除用户及权限1.1.4.修改1.1.4.1.修改密码1.1.4.2.修改用户账号名称1.1.5.回收权限1.1.6.grant授权和直接操作权限表的区别......
  • Linux MySQL 5.7二进制 小版本升级
    LinuxMySQL5.7二进制小版本升级LinuxMySQL5.7二进制小版本升级MySQL5.7二进制安装在Unix/Linux上升级时,分为就地和逻辑升级方法。1就地升级就地升级包括关闭旧的MySQL服务器,用新的MySQL服务器替换旧的MySQL二进制文件或软件包,在现有数据目录上重新启动MySQL,以及运行mys......
  • 记一次mysql小版本升级
    记一次mysql小版本升级最近对后端组件进行安全扫描时,发现了一些轻微漏洞,为了避免后续部署后安全扫描出现问题,决定对mysql做一次版本升级。升级的原则是对mysql的二进制文件进行升级,若有主备节点,先升级从节点升级完成后将其提为主节点,然后再升级原主节点。升级步骤:mysql当前版本......
  • mysql的备份恢复之-mysqldump
    1.目录目录1.目录2.一.背景2.1.分类2.2.基本实现原理3.非一致性备份和一致性备份原理3.1.非一致性备份原理:3.2.一致性备份原理:4.常用备份命令:4.1.建议生产上使用的备份命令:4.2.常用备份选项:4.3.参数详解:4.4.导入4.5.导入时记录日志到文件中2.一.背景2.1.分类......
  • mysql的备份恢复之percona-xtrabackup物理备份
    1.mysql的备份恢复之percona-xtrabackup物理备份目录1.mysql的备份恢复之percona-xtrabackup物理备份1.1.背景1.2.Xtrabackup是什么?1.3.使用场景1.4.Xtrabackup可以做什么?1.5.Xtrabackup版本及下载地址1.6.PerconaXtraBackup工作流程1.7.Xtrabackup使用说明文档1.8.X......
  • MySQL数据迁移之表空间传输
    MySQL数据迁移之表空间传输目录MySQL数据迁移之表空间传输背景环境迁移步骤1.准备源表2.将.ibd、.cfg和.cfp文件从database1复制到database23.在database1上解锁表4.在database2上创建表结构5.删除.idb文件6.复制表空间到数据文件目录7.导入表空间总结背景日......
  • mysql的体系结构
    1.mysql的体系结构目录1.mysql的体系结构1.1.MySQL体系结构1.2.存储引擎1.2.1.MyISAM存储引擎1.2.2.InnoDB存储引擎1.2.3.MEMORY1.2.4.BLACKHOLE1.3.msyql的文件1.3.1.物理文件1.3.2.日志文件1.3.3.配置文件1.3.4.数据文件1.3.5.pid文件1.3.6.socket文件1.4.区分......
  • mysql的二进制日志和中继日志文件的分析、恢复、清理
    1.mysql的二进制日志目录1.mysql的二进制日志1.1.概述1.2.MySQL中二进制日志(binlog)3种不同的格式(Mixed,Statement,Row)1.2.1.Row1.2.2.Statement1.2.3.Mixed1.3.binglog格式设置1.4.二进制日志文件的清理1.4.1.自动清理binglog1.4.1.修改过期时间1.4.2.手动清除......