`
yangzb
  • 浏览: 3500532 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

用MySQL-Proxy实现读写分离

阅读更多

MySQL-Proxy, 6月份发布的 MySQL-Proxy是处在你的MySQL数据库客户和服务端之间的程序,它还支持嵌入性脚本语言Lua 。这个代理可以用来分析、监控和变换(transform)通信数据,它支持非常广泛的使用场景:

  • 负载平衡和故障转移处理
  • 查询分析和日志
  • SQL宏(SQL macros)
  • 查询重写(query rewriting)
  • 执行shell命令

MySQL Proxy更强大的一项功能是实现“读写分离(Read/Write Splitting) ”。基本的原理是让主数据库处理事务性查询,而从数据库处理SELECT查询。数据库复制被用来把事务性查询导致的变更同步到集群中的从数据库。

Jan Kneschke在《MySQL Proxy learns R/W Splitting 》中介绍了这种技巧,他还谈到了连接池的问题:

为了实现读写分离我们需要连接池。我们仅在已打开了到一个后端的一条经过认证的连接的情况下,才切换到该后端。MySQL协议首先进行握手。当进入到查询/返回结果的阶段再认证新连接就太晚了。我们必须保证拥有足够的打开的连接才能保持运作正常。

实现读写分离的LUA脚本是简单明了的:

  -- 读写分离
  --
  -- 发送所有的非事务性SELECT到一个从数据库
  if is_in_transaction == 0 and
     packet:byte() == proxy.COM_QUERY and
     packet:sub(2, 7) == "SELECT" then
    local max_conns = -1
    local max_conns_ndx = 0

    for i = 1, #proxy.servers do
      local s = proxy.servers[i]

      -- 选择一个拥有空闲连接的从数据库
      if s.type == proxy.BACKEND_TYPE_RO and
         s.idling_connections > 0 then
        if max_conns == -1 or
           s.connected_clients < max_conns then
          max_conns = s.connected_clients
          max_conns_ndx = i
        end
      end
    end

    -- 我们找到了一个拥有空闲连接的从数据库
    if max_conns_ndx > 0 then
      proxy.connection.backend_ndx = max_conns_ndx
    end
  else
    -- 发送到主数据库
  end

  return proxy.PROXY_SEND_QUERY

Jan提醒说这个技巧还可以用来实现其他的数据分布策略,例如分片(Sharding)。

查看英文原文: Read/Write Splitting with MySQL-Proxy

分享到:
评论

相关推荐

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

    ### 使用mysql-proxy实现MySQL读写分离 随着业务规模的不断扩大,数据库系统往往成为整个系统中的瓶颈之一。为了提高系统的响应速度以及数据处理能力,一种常用的技术手段就是采用**读写分离**的方式。读写分离的...

    mysql配置mysql-proxy读写分离1

    MySQL Proxy 是一个开源工具,它允许你在 MySQL 客户端和服务器之间设置一个代理层,以便实现诸如负载均衡、故障切换、读写分离等高级功能。在这个场景中,我们将讨论如何配置 MySQL Proxy 来实现读写分离,以提高...

    mysql-proxy实现读写分离1

    MySQL Proxy 是一个开源工具,主要用于实现数据库的读写分离,以优化MySQL服务器的负载。在本文中,我们将探讨如何利用MySQL Proxy实现一个简单的读写分离环境,并关注在配置过程中的一些关键点。 首先,读写分离是...

    sharding-proxy实现分表

    通过以上步骤,我们可以有效地利用 Sharding-Proxy 在 MySQL 5.7 上实现分表策略,提高系统的读写性能,同时保持较低的维护成本。不过,分库分表也会带来一些挑战,如跨表查询复杂度增加、分布式事务处理等,需要在...

    MySQL-Proxy快速实现读写分离以及负载均衡

    MySQL Proxy是MySQL数据库系统中的一个轻量级工具,用于实现数据库的读写分离和负载均衡。它作为一个中间代理服务器,接收来自客户端的请求,然后根据配置策略将这些请求转发到合适的MySQL服务器实例上。在上述描述...

    mysql-proxy 安装配置

    MySQL Proxy 是一个开源工具,它允许用户在 MySQL 客户端和服务器之间插入一个代理层,从而实现诸如负载均衡、故障切换、读写分离等高级功能。以下是对MySQL Proxy安装配置及其相关知识点的详细说明: 1. **安装...

    mysql-proxy读写分离.docx

    公司运维手册,mysql-proxy读写分离,废话不多说,上干货!

    MySQL-Proxy

    它能够实现诸如负载均衡、读写分离、查询缓存等功能,非常适合用在需要对 MySQL 数据库进行性能优化的场景中。 #### 二、主从复制概述 MySQL 的主从复制是指将一台或多台 MySQL 服务器(从服务器)设置为复制另一...

    MySQL Proxy 快速实现读写分离以及负载均衡

    本文将详细介绍如何使用 MySQL Proxy 快速实现读写分离及负载均衡。 #### 二、安装 MySQL Proxy ##### 安装步骤: 1. **下载预编译安装包**:首先需要下载 MySQL Proxy 的预编译安装包。例如,可以通过如下命令...

    Docker搭建MySQLl基于ShardingSphere-Proxy读写分离(docker-compose)

    docker_compose搭建shardingSphereProxyMysql主从读写分离

    MYSQL数据库读写分离mysql-proxy 32bit包

    总结来说,"MYSQL数据库读写分离mysql-proxy 32bit包"是解决MySQL数据库读写压力的一种方法,通过使用MySQL Proxy工具实现读写分离,可以优化数据库性能,提升系统稳定性。不过,使用前需评估其适用性和性能,以确保...

    Mysql Proxy 实现mysql读写分离.pdf

    MySQL Proxy 就是这么一个中间层代理,简单的说,MySQL Proxy 就是一个连接池,负责将前台应用的连接请求转发给后台的数据库,并且通过使用 lua 脚本,可以实现复杂的连接控制和过滤,从而实现读写分离和负载平衡。...

    MySQL读写分离架构与实践--mysql-proxy

    MySQL主从复制(Master-Slave)的方式来同步数据,再通过读写分离(MySQL-Proxy/Amoeba)来提升数据库的并发负载能力 这样的方案来进行部署与实施的

    mysql读写分离配置

    MySQL-Proxy的读写分离功能主要通过`rw-splitting.lua`脚本来实现,因此需要安装Lua语言。 1. **下载Lua源码包**: 可以从官网下载Lua的最新源码包或通过rpm包安装。 ```bash cd /opt/install wget ...

    mysql-proxy:springboot结合aop实现读写分离实例工程

    如今大部分的项目都是基于Spring Boot框架来搭建项目架构的,结合Spring本身自带的AOP工具,我们可以很容易就构建能实现读写分离效果的注解类,用注解的话可以达到对业务代码无入侵的效果,而且使用上也比较方便。...

    LAMP+Proxy+读写分离

    配置MySQL-Proxy实现读写分离通常包括以下步骤: 1. 安装MySQL-Proxy软件,例如在Linux系统中通过wget下载,然后解压缩并移动到合适的位置。 2. 配置环境变量,将MySQL-Proxy的bin目录添加到PATH环境变量中,使系统...

    安装LAP+mysql主从库 apache+mysql+proxy主从+PHP+discuz论坛 .docx

    3. MYSQL读写分离的实现方式:有四种常见的MYSQL读写分离实现方式,分别是MYSQL-Proxy读写分离、Amoeba读写分离、Mycat读写分离和基于程序读写分离。 4. MYSQL-Proxy读写分离:MYSQL-Proxy是MYSQL官方提供的中间件...

    mysql-proxy-0.8.3-win32-x86.zip

    - **脚本示例**:例如,可以写一个脚本来实现读写分离,将读操作路由到只读服务器,写操作路由到主服务器。 - **脚本调用**:脚本通常以`proxy.log`或`proxy.before_query`等事件触发,对SQL语句进行处理。 4. **...

Global site tag (gtag.js) - Google Analytics