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

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介:

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》

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
监控 关系型数据库 数据库
|
24天前
|
监控 Linux Shell
Linux脚本的作用是监控IP登录失败次数
Linux脚本的作用是监控IP登录失败次数
11 1
|
11月前
|
SQL 关系型数据库 MySQL
MySQL kill会话不起作用?
MySQL kill会话不起作用?
125 0
|
关系型数据库 MySQL C++
|
SQL 数据库 Windows
SQL Server会话KILL不掉,一直处于KILLED /ROLLBACK状态情形浅析
原文:SQL Server会话KILL不掉,一直处于KILLED /ROLLBACK状态情形浅析 今天遇到一个很奇怪的情况,发现一个会话异常,这个会话只是在执行一个简单的存储过程,里面使用了链接服务器(Linked Server)查询另外一台服务器数据(存储过程里面没有任何显性事务、UPDATE、D...
1953 0