欢迎您访问我爱IT技术网,今天小编为你分享的编程技术是:【如何使用MySQL-Proxy实现读写分离】,下面是详细的分享!
如何使用MySQL-Proxy实现读写分离
·负载平衡和故障转移处理
·查询分析和日志
·SQL宏(SQL macros)
·查询重写(query rewriting)
·执行shell命令
MySQL Proxy最强大的一项功能是实现“读写分离(Read/Write Splitting)”。基本的原理是让主数据库处理事务性查询,而从数据库处理SELECT查询。数据库复制被用来把事务性查询导致的变更同步到集群中的从数据库。

Jan Kneschke在《MySQL Proxy learns R/W Splitting》中详细的介绍了这种技巧以及连接池问题:
为了实现读写分离我们需要连接池。我们仅在已打开了到一个后端的一条经过认证的连接的情况下,才切换到该后端。MySQL协议首先进行握手。当进入到查询/返回结果的阶段再认证新连接就太晚了。我们必须保证拥有足够的打开的连接才能保持运作正常。
实现读写分离的LUA脚本:
-- 读写分离
--
注释:此技巧还可以用来实现其他的数据分布策略,例如分片(Sharding)。
以下为引用的内容:
-- 发送所有的非事务性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
以上所分享的是关于如何使用MySQL-Proxy实现读写分离,下面是编辑为你推荐的有价值的用户互动:
相关问题:mysql 如何实现读写分离,用mysql-proxy 或者直接...
答:Mysql主从配置,实现读写分离 原理:主服务器(Master)负责网站NonQuery操作,从服务器负责Query操作,用户可以根据网站功能模特性块固定访问Slave服务器,或者自己写个池或队列,自由为请求分配从服务器连接。主从服务器利用MySQL的二进制日志... >>详细
相关问题:mysql读写分离原理是什么
答:利用mysql proxy来实现的。 MySQL Proxy最强大的一项功能是实现“读写分离(Read/Write Splitting)”。基本的原理是让主数据库处理事务性查询,而从数据库处理SELECT查询。数据库复制被用来把事务性查询导致的变更同步到集群中的从数据库。 当然,... >>详细
相关问题:实现mysql主从复制和读写分离能在同一电脑上吗
答:MySQL主从复制(Master-Slave)与读写分离(MySQL-Proxy)实践 Mysql作为目前世界上使用最广泛的免费数据库,相信所有从事系统运维的工程师都一定接触过。但在实际的生产环境中,由单台Mysql作为独立的数据库是完全不能满足实际需求的,无论是在安全... >>详细
- 评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)
-
