HarmonyOS开发者限时福利来啦!最高10w+现金激励等你拿~ 了解详情
写点什么

用 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:0628798
用户头像

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

关注

评论

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

Native Instruments Guitar Rig 7 Pro for Mac(吉他贝斯效果器)

理理

CST软件如何实现S-parameter随其他参数变化的1D曲线

思茂信息

教程 cst cst仿真软件

化学绘图 chemdraw 20.0 永久激活码 mac&win

理理

平顶山等保测评机构有哪些?电话多少?

行云管家

等保 等保测评 平顶山

堡垒机有远程协助解决难题功能吗?哪家的好用?

行云管家

网络安全 堡垒机

KeyShot 2024.3 for mac专业实时渲染和动画软件

Mac相关知识分享

HyperWorks批处理网格的类型设置

智造软件

CAE软件 hyperworks BatchMesher

Python淘宝数据挖掘与词云图制作指南

代码忍者

API 接口 pinduoduo API

Autodesk Maya 2025 for Mac综合性的三维动画创作软件

Mac相关知识分享

管理文档必看:8款企业内部工具介绍

爱吃小舅的鱼

文档管理 文档管理软件 文档管理工具

Resolume Arena 7,打造顶级多媒体演出工具

理理

Set A Light 3D Studio for Mac开创性的摄影工作室模拟软件

Mac相关知识分享

AI 产品系统的数据指标

艾蒿

指标中台; 数据分析 AI 基础设施

经典gba游戏(寂静岭、节奏天国、机兽新世纪等)游戏合集

理理

畅享云边大模型!火山引擎 x 地瓜机器人,大模型网关能力免费开放

火山引擎边缘云

边缘计算 机器人 智能IoT边缘服务 大模型 边缘智能

3D壁纸屏保 Screen Wonders for mac,让屏幕变得如此绚丽!

理理

有php转go项目经验者优先?

王中阳Go

php Go 面试

TDengine 集群能力:超越 InfluxDB 的水平扩展与开源优势

TDengine

tdengine 时序数据库 数据库·

测试开发岗位就业与内推指导公开课

测试人

软件测试

SnailSVN Pro for mac SVN客户端

理理

IDEA中通义灵码的使用技巧

威哥爱编程

IDEA Java. 通义灵码 AI辅助

iZotope RX 11 专业音频修复软件

理理

专业级的音乐制谱软件 Steinberg Dorico Pro for Mac 中文版

理理

百度沧海·存储统一技术底座架构演进

Baidu AICLOUD

对象存储 分布式存储 云存储 存储架构

ULTIMATE VOCAL REMOVER V5 for mac(UVR5终极人声去除器)v5.6激活版

理理

CAD迷你看图 for Mac

Mac相关知识分享

如何提升汽车行业的项目管理效率?

爱吃小舅的鱼

项目管理 管理项目 汽车行业

珂芝双十一AI体验月福利来袭,更有众多新品上新!

科技热闻

TapData 发布官方性能测试报告,针对各流行数据源,在多项指标中表现拔群

tapdata

数据复制 Tapdata 实时数据集成 tapdata性能测试 性能测试报告

测试开发岗位就业与内推指导公开课

测吧(北京)科技有限公司

测试

数据安全再添保障!TapData 顺利通过 SOC2 Type 2 权威认证

tapdata

数据安全 实时数据平台 数据合规 数据集成工具 soc2type2认证

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