zoukankan      html  css  js  c++  java
  • ProxySQL环境下,快速处理异常会话的方法(黑名单、KILL)

    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》
  • 相关阅读:
    多级部署下的SuperMap iServer 2.0 JS 聚合功能(一)
    Kubernetes&Docker集群部署
    股票数据存储系统(KeyValue存储)设计与实现
    Ajax+Tornado模拟长、短轮询
    REST架构网站改写:前端MVC Angular.js,Web框架 Express.js, 数据库 MongoDB
    SQLite数据库C++ API封装
    一致性哈希(Consistent Hashing)算法的C++实现
    数据结构——排序
    数据结构——折半查找
    索引学习笔记
  • 原文地址:https://www.cnblogs.com/autopenguin/p/12501344.html
Copyright © 2011-2022 走看看