ProxySQL环境下,快速处理异常会话的方法(黑名单、KILL)

本文涉及的产品
RDS MySQL DuckDB 分析主实例,基础系列 4核8GB
RDS AI 助手,专业版
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
简介:

ProxySQL环境下,快速处理异常会话的方法:

1 定位需要处理的异常会话

当程序存在异常、SQL效率大幅下降等情况出现时,可能导致对后端数据库不堪重负,此时需要快速终止会话,保护后端数据库能提供正常的服务。

在该环节中,可以定位出“客户端IP”、“异常SQL”、“使用的数据库用户名”、“访问的Schema”等信息,以上信息越多越能准确地终止异常会话

2 为异常会话设置黑名单

注意:对于当前大部分的应用程序而言,均设置了数据库重连的功能,这意味这如果只是单纯地终止会话,往往难以起到应有的效果。因此比较好的做法是在终止前,先设置异常会话黑名单,自动的阻止异常请求的进入。以下各小节则介绍了常见的黑名单设置方法。

注意:由于路由规则根据rule_id顺序应用的,因此可以预留前100个ID用于做异常会话的黑名单
此时,该IP应用发起请求时,将报错ERROR 1148 (42000): Blocking Error Connection

2.1 阻止特定IP的请求

假设异常的请求来源于11.25.151.20这个IP,则登录ProxySQL管理端后,对黑名单设置的步骤及操作过程如下。

Admin> insert into mysql_query_rules(rule_id,active,client_addr,error_msg,apply)
values (1,1,'11.25.151.20','Blocking Error Connection', 1);

--将内存暂存配置加载为运行配置(不需要将配置存至disk)
Admin> load mysql query rules to runtime;

2.2 阻止特定IP的特定SQL

假设异常的请求来源于11.25.151.20这个IP,异常请求为INSERT,则登录ProxySQL管理端后,对黑名单设置的步骤及操作过程如下。

Admin> insert into mysql_query_rules(rule_id,active,client_addr,match_digest,error_msg,apply)
values (1,1,'11.25.151.20','^INSERT*','Blocking Error Connection', 1);

--将内存暂存配置加载为运行配置(不需要将配置存至disk)
Admin> load mysql query rules to runtime;

^INSERT*正则表达式,代表以INSERT开头的任意SQL语句。

3 终止异常会话

在ProxySQL环境下,终止会话使用KILL CONNECTION+[session_id]的语法。

[session_id]即为stats_mysql_processlist.SessionID字段。

例如,要批量终止test_user用户的会话,则可按如下语句拼接出终止会话的SQL。

Admin> SELECT 'KILL CONNECTION '||SessionID||';', 
    cli_host, srv_host, command
FROM stats_mysql_processlist
WHERE user='test_user';

参考资料:

  1. 《ProxySQL Wiki》

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
目录
相关文章
|
Linux Perl
Linux centos7升级内核(两种方法:内核编译和yum更新)
Linux centos7升级内核(两种方法:内核编译和yum更新)
4391 1
Linux centos7升级内核(两种方法:内核编译和yum更新)
|
2月前
|
存储 小程序 应用服务中间件
阿里云200Mbps轻量应用服务器详细介绍,看完一目了然
阿里云轻量应用服务器2核2G,40GB ESSD云盘,200M峰值带宽,不限流量,仅需68元/年,秒杀价38元/年。支持Windows/Linux,预装宝塔、WordPress等应用,适用于建站、小程序、开发测试等场景。详细参考阿里云活动中心 https://t.aliyun.com/U/emyGuZ
366 0
|
域名解析 存储 网络协议
Linux中搭建主从DNS服务器
搭建主从DNS架构以提升DNS服务的高可用性、负载均衡和数据冗余。主服务器配置涉及编辑`/etc/named.conf`,设置监听IP和允许查询的范围,并定义主区域及允许的数据传输。从服务器配置需指定为奴隶类型,并指明主服务器的IP。测试表明正反向查询解析均正常。注意配置文件的语法正确性和权限设置。
615 0
|
机器学习/深度学习 Python
机器学习中模型选择和优化的关键技术——交叉验证与网格搜索
本文深入探讨了机器学习中模型选择和优化的关键技术——交叉验证与网格搜索。介绍了K折交叉验证、留一交叉验证等方法,以及网格搜索的原理和步骤,展示了如何结合两者在Python中实现模型参数的优化,并强调了使用时需注意的计算成本、过拟合风险等问题。
1012 6
|
C++
VS IIS Express 启动项目后,绑IP让别人可以访问你的网站
VS IIS Express 启动项目后,绑IP让别人可以访问你的网站
822 0
|
Java
【Java系列】if-else代码优化的八种方案
目录 前言 优化方案一:提前return,去除不必要的else 优化方案二:使用条件三目运算符 优化方案三:使用枚举 优化方案四:合并条件表达式 优化方案五:使用 Optional 优化方案六:表驱动法 优化方案七:优化逻辑结构,让正常流程走主干 优化方案八:策略模式+工厂方法消除if else 前言 代码中如果if-else比较多,阅读起来比较困难,维护起来也比较困难,很容易出bug,接下来,本文将介绍优化if-else代码的八种方案。 优化方案一:
1096 0
【Java系列】if-else代码优化的八种方案
|
Linux Docker 异构计算
模型部署 — PaddleNLP 基于 Paddle Serving 快速使用(服务化部署 - Docker)— 图像识别 + 信息抽取(UIE-X)
模型部署 — PaddleNLP 基于 Paddle Serving 快速使用(服务化部署 - Docker)— 图像识别 + 信息抽取(UIE-X)
519 0
|
JavaScript 前端开发 数据管理
扁平数据转树形结构,让数据管理更清晰
扁平数据转树形结构,让数据管理更清晰
|
NoSQL Java Redis
redis集群拓扑结构自动更新:使用Lettuce连接Cluster集群实例时异常处理(二)
redis集群拓扑结构自动更新:使用Lettuce连接Cluster集群实例时异常处理
1454 0

热门文章

最新文章