写点什么

用 MySQL-Proxy 实现读写分离

  • 2007-10-17
  • 本文字数:993 字

    阅读完需:约 3 分钟

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 脚本是简单明了的:

-- 读写分离 <br></br>  --<br></br>  -- 发送所有的非事务性 SELECT 到一个从数据库 <br></br>  if is_in_transaction == 0 and<br></br>     packet:byte() == proxy.COM_QUERY and<br></br>     packet:sub(2, 7) == "SELECT" then<br></br>    local max_conns = -1<br></br>    local max_conns_ndx = 0<p>    for i = 1, #proxy.servers do</p><br></br>      local s = proxy.servers[i]<p>      -- 选择一个拥有空闲连接的从数据库 </p><br></br>      if s.type == proxy.BACKEND_TYPE_RO and<br></br>         s.idling_connections > 0 then<br></br>        if max_conns == -1 or<br></br>           s.connected_clients < max_conns then<br></br>          max_conns = s.connected_clients<br></br>          max_conns_ndx = i<br></br>        end<br></br>      end<br></br>    end<p>    -- 我们找到了一个拥有空闲连接的从数据库 </p><br></br>    if max_conns_ndx > 0 then<br></br>      proxy.connection.backend_ndx = max_conns_ndx<br></br>    end<br></br>  else<br></br>    -- 发送到主数据库 <br></br>  end<p>  return proxy.PROXY_SEND_QUERY</p><br></br>Jan 提醒说这个技巧还可以用来实现其他的数据分布策略,例如分片(Sharding)。

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

2007-10-17 13:0629077
用户头像

发布了 225 篇内容, 共 69.6 次阅读, 收获喜欢 52 次。

关注

评论

发布
暂无评论
发现更多内容

HarmonyOS实战: 城市选择功能的快速实现

IT小码哥

HarmonyOS NEXT harmoyos Harmony5

华为仓颉语言初识:结构体struct和类class的异同

IT小码哥

HarmonyOS 鸿蒙 Ability harmony HarmonyOS NEXT

连接财务和营销计划的资源管理战略

智达方通

企业管理 营销管理 全面预算管理 经营管理

降维技术:带你走进数据的“瘦身”世界

电子尖叫食人鱼

数据库

HarmonyOS NEXT「星辰启明时 代码绘鸿图」

Turing_010

Flutter跨端开发新范式:小程序容器技术驱动App高效构建

xuyinyin

架构提效的矛盾和矛盾的主要方面

京东科技开发者

HarmonyOS Next开发利器:DevEco Studio高效编码技巧 🚀

Turing_010

如何通过ETL对WebService进行调用

RestCloud

数据库 数据仓库 WebService ETL 数据集成

开源鸿蒙开发者大会2025交流区亮点纷呈,社区与生态伙伴共绘智能图景

极客天地

《独立开发工具 • 半月刊》 第 001 期

沉浸式趣谈

数字零售行业基于Sermant的应用实战之全链路灰度

华为云开源

开源社区 微服务治理 字节码增强 华为云开源

理解AI工作负载与SSD在性能中的关键作用

ScaleFlux

人工智能 大数据 cpu 存储 企业级NVMeSSD

2025上海国际机器人产业展览会

AIOTE智博会

机器人展 智能机器人展 人形机器展

数字标牌LED显示屏方案:点亮商业新未来

Dylan

商业 LED显示屏 全彩LED显示屏 led显示屏厂家 电商场景

ArkUI预览器使用说明书(Harmony OS Next)

Turing_010

周边生态:Apache SeaTunnel 集成 Apache Cloudberry,构建大规模数据集成解决方案

酷克数据HashData

如何在CST里仿真三端子的电容

思茂信息

PCB 电磁仿真 CST Studio Suite

什么是无代码开发平台?一文讲清无代码平台的优势现状与前景!

积木链小链

数字化转型 无代码 智能制造

2025 网易创新企业大会圆满收官,聚焦AI Agent 如何重塑企业未来

ToB行业头条

网易

华为仓颉语言初识:并发编程之线程的基本使用

IT小码哥

鸿蒙 Ability harmony harmoyos

AI赋能引爆短剧全球化风潮,腾讯云媒体处理助力短剧平台出海吸金

腾讯云音视频

AI 出海 媒体智能

HarmonyOS NEXT ArkUI生命周期终极指南 | 组件与页面的关系

Turing_010

《独立开发工具 • 半月刊》 第 002 期

沉浸式趣谈

业务监控—一站式搭建jmeter+telegraf+influxdb+Grafana看板

京东科技开发者

HarmonyOS实战:3秒实现一个自定义轮播图

IT小码哥

鸿蒙 Ability harmony HarmonyOS NEXT harmoyos

“深时数字地球”国际大科学计划系列工作坊持续开放!专业友好可复现,赋能科学智能生态合作(5)

ModelWhale

科学智能 AI4S DDE深时数字地球

雅迪首款支付宝碰一下电动车量产,售价4699元

科技热闻

从 o11y 2.0 说起,大数据 Pipeline 的「多快好省」之道

阿里巴巴云原生

阿里云 云原生 可观测

🤖【HarmonyOS调试全攻略】设备连接+运行环境一站式指南💡

Turing_010

供应链计划性能优化解决方案-Clickhouse本地Join

京东科技开发者

用MySQL-Proxy实现读写分离_数据库_Gavin Terrill_InfoQ精选文章