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脚本是简单明了的:
-- 读写分离
--
-- 发送所有的非事务性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
Jan提醒说这个技巧还可以用来实现其他的数据分布策略,例如分片(Sharding)。
- 大小: 24.3 KB
分享到:
相关推荐
使用mysql-proxy实现mysql读写分离
1. [root@bogon ~]# yum -y install gcc* gcc-c++* autoconf* automake* zlib* libxml
使用mysql5.7+sharding-proxy实现分表,策略为每半年时间分一次表
1.Seconds_Behind_Master 不为了,这个值可能会很大 3.mysql 的 slave 数据库目录下存在大量的 mysql-relay-log
mysql-proxy 架构 读写分离的基本文档 目前可以部署使用
公司运维手册,mysql-proxy读写分离,废话不多说,上干货!
MySQL_Proxy快速实现读写分离以及负载均衡
MySQL主从复制(Master-Slave)的方式来同步数据,再通过读写分离(MySQL-Proxy/Amoeba)来提升数据库的并发负载能力 这样的方案来进行部署与实施的
MYSQL数据库读写分离实验的mysql-proxy包
docker_compose搭建shardingSphereProxyMysql主从读写分离
如今大部分的项目都是基于Spring Boot框架来搭建项目架构的,结合Spring本身自带的AOP工具,我们可以很容易就构建能实现读写分离效果的注解类,用注解的话可以达到对业务代码无入侵的效果,而且使用上也比较方便。...
mysql +mmm + proxy实现读写分离 ,数据库实现读写分离
MySQL Proxy 快速实现读写分离以及负载均衡
Mysql Proxy 实现mysql读写分离.pdf
MysqlProxy实现mysql读写分离[整理].pdf
MySQL数据库主从复制以及读写分离搭建过程
环境: 192.168.100.210 ... 208作为mysql-proxy. 106作为测试机器.相关软件下载: lua www.lua.org mysql-proxy http://mysql.cdpa.nsysu.edu.tw/Downloads/MySQL-Proxy/1. 在208上安装lua #tar zxvf lua-5.
Amoeba主要解决以下问题: a). 数据切分后复杂数据源整合 b). 提供数据切分规则并降低数据切分规则给数据库带来的影响 c). 降低数据库与客户端连接 d). 读写分离路由 通过Amoeba实现读写分离
在springboot中如何实现多数据源,动态数据源切换,读写分离等操作。想要实现数据源动态切换,需要用到以下知识 spring boot 中自定义注解 spring boot 中的 aop 拦截 mybatis 的增删改查操作
Amoeba属于分布式数据库代理开发框架,专注于分布式数据库 proxy 开发。座落与Client、DB Server(s)...具有负载均衡、高可用性、sql过滤、读写分离、可路由相关的query到目标数据库、可并发请 求多台数据库合并结果。