如何使用"MySQL-Proxy"实现读写分离

2016-02-19 19:52 5 1 收藏

今天图老师小编要向大家分享个如何使用"MySQL-Proxy"实现读写分离教程,过程简单易学,相信聪明的你一定能轻松get!

【 tulaoshi.com - 编程语言 】

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

  ·负载平衡和故障转移处理

  ·查询分析和日志

  ·SQL宏(SQL macros)

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

  ·查询重写(query rewriting)

  ·执行shell命令

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

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

  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)。

来源:http://www.tulaoshi.com/n/20160219/1622093.html

延伸阅读
标签: 孩子
帮助孩子直接面对挫折 在超市里,4岁的亮亮看到自己爱吃的糖果,要求妈妈买,妈妈不同意,亮亮便纠缠不休,但妈妈的态度很坚决。当亮亮意识到今天他无论如何也得不到糖果了,他气急败坏起来,转身从货架上抓了两个桔子,狠狠地摔到了地上。看到亮亮的行为,妈妈很是震惊。但事实上,亮亮并不另类,很多孩子都会这么做。孩子为何频频受挫?⊙3...
意外宝宝并非喜从天降 很多80后、90后将非计划 怀孕 美其名曰为喜从天降,视奉子成婚为水到渠成。然而事实并非想象那么完美,无数 新生儿 病例证明:这些来自于非计划怀孕的意外宝宝往往意味着胚胎命运多舛。 意外宝宝难保质量非计划怀孕导致孕前补充叶酸、接种疫苗等措施被耽误,胎儿质(图老师整理)量总体上比...
MYSQL 帮助:A.2.3 Client does not support authentication protocol MySQL 4.1 and up uses an authentication protocol based on a password hashing algorithm that is incompatible with that used by older clients. If you upgrade the server to 4.1, attempts to connect to it with an older client may fail with the following me...
标签: Web开发
在网上找到一个用ASP开的假线程,发现和我以前做的一个程序不谋而合,只不过以前用的是VB,摘下来,储备. 1.原理实验 原理当然都一样,利用web服务器支持多线程,在同一页面里向服务器发多个http请求来完成我们的工作。还是先实验一下,在一个页面里同时写2个txt文件,比较写入时间的差异。代码如下: % startime=timer() ''----------asp实现多...
标签: Web开发
A common UI is to have a table of data rows, which when clicked on expand to show a detailed breakdown of "child" rows below the "parent" row. The only requirements ar...

经验教程

148

收藏

36
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部