mysql 读写分离(基础篇)

 更新时间:2009年04月13日 11:10:42   作者:  
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

注释:此技巧还可以用来实现其他的数据分布策略,例如分片(Sharding)。

相关文章

  • 快速学习MySQL索引的入门超级教程

    快速学习MySQL索引的入门超级教程

    这篇文章主要介绍了快速学习MySQL索引的入门教程,包括索引的创建和删除等基础知识,需要的朋友可以参考下
    2015-11-11
  • MYSQL事务回滚的2个问题分析

    MYSQL事务回滚的2个问题分析

    在事务中,每个正确的原子操作都会被顺序执行,直到遇到错误的原子操作,此时事务会将之前的操作进行回滚。回滚的意思是如果之前是插入操作,那么会执行删 除插入的记录,如果之前是update操作,也会执行update操作将之前的记录还原
    2014-05-05
  • Mysql数据库时间与系统时间不一致问题排查及解决

    Mysql数据库时间与系统时间不一致问题排查及解决

    最近忽然发现个问题,Mysql数据库时间与系统时间不一致,通过查找相关资料终于解决了,下面这篇文章主要给大家介绍了关于Mysql数据库时间与系统时间不一致问题排查及解决的相关资料,需要的朋友可以参考下
    2023-06-06
  • Mysql version can not be less than 4.1 出错解决办法

    Mysql version can not be less than 4.1 出错解决办法

    这篇文章主要介绍了Mysql version can not be less than 4.1 解决办法的相关资料,需要的朋友可以参考下
    2016-10-10
  • MySQL压测神器HammerDB的部署及使用详解

    MySQL压测神器HammerDB的部署及使用详解

    HammerDB 是一个开源的数据库负载测试和基准测试工具,同时支持 Windows 和 Linux 平台,这篇文章主要介绍了MySQL压测神器HammerDB的部署及使用,需要的朋友可以参考下
    2022-08-08
  • 关于mysql合并表的详细介绍

    关于mysql合并表的详细介绍

    本篇文章是对mysql中的合并表进行了详细的分析介绍,需要的朋友参考下
    2013-06-06
  • MySQL中Navicat自动备份的实现

    MySQL中Navicat自动备份的实现

    本文主要介绍了MySQL中Navicat自动备份的实现,包括手动备份和自动定时备份,文中通过图文示例介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-03-03
  • mysql如何让左模糊查询也能走索引

    mysql如何让左模糊查询也能走索引

    这篇文章主要介绍了mysql如何让左模糊查询也能走索引,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-11-11
  • mysql自增ID起始值修改方法

    mysql自增ID起始值修改方法

    本文介绍mysql自增ID的起始值修改与设置方法
    2013-11-11
  • Linux系统下Mysql使用简单教程(一)

    Linux系统下Mysql使用简单教程(一)

    这篇文章主要介绍了Linux系统下Mysql使用简单教程(一)的相关资料,需要的朋友可以参考下
    2016-05-05

最新评论