MySQL中间件之ProxySQL(12):禁止多路路由
返回ProxySQL系列文章:http://www.cnblogs.com/f-ck-need-u/p/7586194.html
1.multiplexing
multiplexing,作用是将语句分多路路由。开启了multiplexing开关,读/写分离、按规则路由才能进行。但有时候,有些语句要求路由到同一个主机组,甚至是同一个主机组中的同一个节点上。这时会自动禁用multiplexing。禁用multiplexing后,语句会根据同一个连接进行路由。
也就是说,在禁用multiplexing情况下,会将语句路由到同一个主机组中的同一个节点上。
什么情况下会禁用多路路由(disable multiplexing)?
- 激活事务时
当某连接中激活了一个事务,则在该事务提交或回滚之前,multiplexing将一直被禁用。
- 表被锁
当执行了LOCK TABLE, LOCK TABLES 或 FLUSH TABLES WITH READ LOCK 时,将一直禁用multiplexing,直到执行UNLOCK TABLES。
- 使用
GET_LOCK()时
如果执行了GET_LOCK(),将一直禁用multiplexing,且永不再次启用。
- 使用某些特定的会话/用户(session/user)变量
所有查询的query_digest部分包含了@的都将禁用multiplexing,且永不再次启用。
下面的命令是类似的情况,都会禁用multiplexing且不再次启用:
SET SQL_SAFE_UPDATES=?,SQL_SELECT_LIMIT=?,MAX_JOIN_SIZE=?(mysql --safe-updates)SET FOREIGN_KEY_CHECKSSET UNIQUE_CHECKSSET AUTO_INCREMENT_INCREMENT(v 1.4.4+)SET AUTO_INCREMENT_OFFSET(v 1.4.4+)SET GROUP_CONCAT_MAX_LEN(v 1.4.4+)
但下面两个语句是例外,因为它们被硬编码为不禁用multiplexing:
SELECT @@tx_isolationSELECT @@version
之所以要硬编码这两个例外,是因为很多应用程序在每个连接中都会执行这两个语句。
- 使用
SQL_CALC_FOUND_ROWS
如果查询语句中包含了SQL_CALC_FOUND_ROWS,那么该连接上将禁用multiplexing且不再启用。
- 临时表
如果执行了CREATE TEMPORARY TABLE,那么该连接上将禁用multiplexing且不再启用。
- 使用
PREPARE
如果执行PREPARE语句(该语句使用文本协议准备好语句,而不是二进制协议),将禁用multiplexing且不再启用。
SQL_LOG_BIN设置为0时,即禁用binlog
如果SQL_LOG_BIN设置为0,则multiplexing将被禁用直到SQL_LOG_BIN开启。
Not handled session variables
大多数会话变量都不会自动进行处理。
例如,如果客户端发出了SET TX_ISOLATION=?,将不会禁用multiplexing。
当有不同客户端使用了不同的tx_isolation时,这将是一个bug,但一般所有客户端都使用默认的tx_isolation(绝大多数情况都如此)。
Ad-hoc enable/disable of multiplexing
mysql_query_rules.multiplexing允许基于匹配标准来启用/禁用multiplexing。当前该字段可接受的值有:
- 0 : 禁用multiplexing
- 1 : 启用multiplexing
- 2 : 对于包含了
@的查询语句不禁用multiplexing(默认包含了@的语句会禁用multiplexing)
例如,如果你的应用程序中使用了SET SQL_SELECT_LIMIT,你可以创建下面两条规则来启用multiplexing:
INSERT INTO mysql_query_rules (active,match_digest,multiplex) VALUES
('1','^SET SQL_SELECT_LIMIT=?',0), (1,'^SET SQL_SELECT_LIMIT=DEFAULT,1);
如果你的应用程序中使用了类似于SELECT @@max_allowed_packet的语句,为了避免默认情况下这样的语句禁用multiplexing,可以创建如下规则:
INSERT INTO mysql_query_rules (active,match_digest,multiplex) VALUES
('1','^SELECT @@max_allowed_packet',2);
... 还可以将此进行缓存:
INSERT INTO mysql_query_rules (active,match_digest,multiplex,cache_ttl) VALUES
('1','^SELECT @@max_allowed_packet',2,60000);
如果你的应用程序尝试要设置一个变量,而这可能会禁用multiplexing,如果这个设置语句能够写规则来匹配,可以创建一个筛选条件返回OK而无需去执行查询,这样就不会修改multiplexing当前的策略:
INSERT INTO mysql_query_rules (active,match_digest,OK_msg) VALUES
('1','^SET @@wait_timeout = ?','');
MySQL中间件之ProxySQL(12):禁止多路路由的更多相关文章
- MySQL中间件之ProxySQL(1):简介和安装
返回ProxySQL系列文章:http://www.cnblogs.com/f-ck-need-u/p/7586194.html 1.ProxySQL简介 之前的文章里,介绍了一个MySQL的中间件: ...
- ProxySQL(12):禁止多路路由
文章转载自:https://www.cnblogs.com/f-ck-need-u/p/9372447.html multiplexing multiplexing,作用是将语句分多路路由.开启了mu ...
- MySQL中间件之ProxySQL(7):详述ProxySQL的路由规则
返回ProxySQL系列文章:http://www.cnblogs.com/f-ck-need-u/p/7586194.html 1.关于ProxySQL路由的简述 当ProxySQL收到前端app发 ...
- MySQL中间件之ProxySQL(2):初试读写分离
返回ProxySQL系列文章:http://www.cnblogs.com/f-ck-need-u/p/7586194.html 1.实现一个简单的读写分离 这里通过一个简单的示例实现ProxySQL ...
- MySQL中间件之ProxySQL(5):线程、线程池、连接池
返回ProxySQL系列文章:http://www.cnblogs.com/f-ck-need-u/p/7586194.html 1.ProxySQL的线程 ProxySQL由多个模块组成,是一个多线 ...
- MySQL中间件之ProxySQL(6):管理后端节点
返回ProxySQL系列文章:http://www.cnblogs.com/f-ck-need-u/p/7586194.html 1.配置后端节点前的说明 为了让ProxySQL能够找到后端的MySQ ...
- MySQL中间件之ProxySQL(14):ProxySQL+PXC
返回ProxySQL系列文章:http://www.cnblogs.com/f-ck-need-u/p/7586194.html 1.ProxySQL+PXC 本文演示ProxySQL代理PXC(Pe ...
- MySQL中间件之ProxySQL(10):读写分离方法论
返回ProxySQL系列文章:http://www.cnblogs.com/f-ck-need-u/p/7586194.html 1.不同类型的读写分离 数据库中间件最基本的功能就是实现读写分离,Pr ...
- MySQL中间件之ProxySQL(3):Admin管理接口
返回ProxySQL系列文章:http://www.cnblogs.com/f-ck-need-u/p/7586194.html 1.ProxySQL的Admin管理接口 当ProxySQL启动后,将 ...
随机推荐
- 再探haproxy
一 设置haproxy输出log 1.1 调整配置文件 默认haproxy是不会输出log到文件的,这样很大程度在查询问题时会很不方便,haproxy是可以输出日志到文件的,配置文档类似于如下: ]# ...
- 2019年华南理工校赛(春季赛)--I--炒股(简单思维水题)
水题,想想就过了 题目如下: 链接:https://ac.nowcoder.com/acm/contest/625/I来源:牛客网 攒机一时爽,一直攒机一直爽. 沉迷攒机的胡老师很快就发现,他每天只能 ...
- 2018-04-10 我的GitHub诞生的日子,欢迎大家吐槽批评
我的GitHub,诞生的日子,欢迎大家吐槽与批评,嘻嘻 首先是自己想刷一下LeetCode上的代码,其次创建了自己的读书笔记以及面试经验与教训 下边是仓库的Git链接,欢迎大家的批评与修正,谢谢: L ...
- PHP单一文件入口框架简析
<?php /** * PHP单一文件框架设计简析 * 1.MVC架构实现 * 2.URL路由原理 */ //URL路由原理 /** * 路由作用 * 获取url中的c和a变量,执行c类对应的方 ...
- Note of Python Math
Note of Python Math math 库是Python 提供的内置数学类函数库,而其中复数类型常用于科学计算,一般计算并不常用,因此math 库不支持复数类型.math 库一共提供4个数学 ...
- VS Code 之 smarty 扩展
VS Code 中的 Smarty 扩展: https://github.com/imperez/vscode-smarty 目前(v0.2.0)不支持定制定界符.可以通过 trick 的方式篡改. ...
- Metasploit漏洞的利用
- 起步:Proteus 8 仿真 Arduino 1.8.2
一.环境准备 1.从Arduino官网或中文社区下载并安装 Arduino IDE 当前最新版1.8.2:http://www.arduino.cn/thread-5838-1-1.html 2.下载 ...
- Exp2 后门原理与实践-------20164325王晓蕊
Exp2 后门原理与实践 任务一:使用netcat获取主机操作Shell,cron启动 1.windows获取linux shell 1.1 ipconfig 查看本机查看以太网适配器(8)的ipv ...
- 微信屏蔽APP分享链接的解决方案原理,剖析微信域名防封技术
为什么很多商家在微信封域名如此严格的情况下,还会挤破头皮去做微信营销和推广呢?又有些人问,为什么别人的域名长时间推广都没事,自己的链接在微信内一推就被拦截呢?这里你可能需要注意一点事,事出无常必有妖. ...