天天看點

ProxySQL環境下,快速處理異常會話的方法(黑名單、KILL)ProxySQL環境下,快速處理異常會話的方法:參考資料:

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》