關於Aborted connection告警日誌的分析

来源:https://www.cnblogs.com/kunjian/archive/2020/03/20/12530653.html
-Advertisement-
Play Games

前言: 有時候,連接MySQL的會話經常會異常退出,錯誤日誌里會看到"_Got an error reading communication packets_"類型的告警。本篇文章我們一起來討論下該錯誤可能的原因以及如何來規避。 1.狀態變數Aborted_clients和Aborted_conne ...


前言: 

有時候,連接MySQL的會話經常會異常退出,錯誤日誌里會看到"Got an error reading communication packets"類型的告警。本篇文章我們一起來討論下該錯誤可能的原因以及如何來規避。

1.狀態變數Aborted_clients和Aborted_connects

首先我們來瞭解下Aborted_clients和Aborted_connects這兩個狀態變數的含義,當出現會話異常退出時,這兩個狀態值會有變化。根據官方文檔描述,總結如下:

image.png
造成Aborted_connects狀態變數增加的可能原因:

  1. 客戶端試圖訪問資料庫,但沒有資料庫的許可權。
  2. 客戶端使用了錯誤的密碼。
  3. 連接包不包含正確的信息。
  4. 獲取一個連接包需要的時間超過connect_timeout秒。

image.png
造成Aborted_clients狀態變數增加的可能原因:

  1. 程式退出前,客戶機程式沒有調用mysql_close()。
  2. 客戶端睡眠時間超過了wait_timeout或interactive_timeout參數的秒數。
  3. 客戶端程式在數據傳輸過程中突然終止。

簡單來說即:資料庫會話未能正常連接到資料庫,會造成Aborted_connects變數增加。資料庫會話已正常連接到資料庫但未能正常退出,會造成Aborted_clients變數增加。

2.Got an error reading communication packets原因分析

哪種情況會導致error log中出現“Aborted connection xxxx to db: 'db' user: 'dbuser' host: 'hostname' (Got an error reading communication packets)”類似告警呢?下麵我們根據上面可能的原因來做下具體測試。每次測試要註意狀態變數Aborted_clients和Aborted_connects的變化及錯誤日誌記錄。

  • 測試一:錯誤密碼,錯誤用戶
1.測試前查看狀態變數值
mysql> show global status like 'abort%';
+------------------+-------+
| Variable_name    | Value |
+------------------+-------+
| Aborted_clients  | 0     |
| Aborted_connects | 0     |
+------------------+-------+

2.測試過程
# mysql -uroot -pwrongpass
mysql: [Warning] Using a password on the command line interface can be insecure.
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
# mysql -uroot1 -pwrongpass
mysql: [Warning] Using a password on the command line interface can be insecure.
ERROR 1045 (28000): Access denied for user 'root1'@'localhost' (using password: YES)

3.查看狀態變化及錯誤日誌
mysql> show global status like 'abort%';
+------------------+-------+
| Variable_name    | Value |
+------------------+-------+
| Aborted_clients  | 0     |
| Aborted_connects | 2     |
+------------------+-------+
錯誤日誌記錄:
2020-03-16T17:58:35.318819+08:00 6 [Note] Access denied for user 'root'@'localhost' (using password: YES)
2020-03-16T17:59:04.153753+08:00 7 [Note] Access denied for user 'root1'@'localhost' (using password: YES)

結果:Aborted_connects有增加 error log無Aborted connection相關記錄
  • 測試二:睡眠時間超時或手動殺會話
1.測試前查看狀態變數值
mysql> show global status like 'abort%';
+------------------+-------+
| Variable_name    | Value |
+------------------+-------+
| Aborted_clients  | 0     |
| Aborted_connects | 2     |
+------------------+-------+

2.手動殺會話測試
mysql> show processlist;
+----+------+-----------+------+---------+------+----------+------------------+
| Id | User | Host      | db   | Command | Time | State    | Info             |
+----+------+-----------+------+---------+------+----------+------------------+
|  9 | root | localhost | NULL | Query   |    0 | starting | show processlist |
| 10 | root | localhost | NULL | Sleep   |    7 |          | NULL             |
+----+------+-----------+------+---------+------+----------+------------------+
2 rows in set (0.00 sec)
mysql> kill 10;
Query OK, 0 rows affected (0.00 sec)

3.查看狀態變化及錯誤日誌
mysql> show global status like 'abort%';
+------------------+-------+
| Variable_name    | Value |
+------------------+-------+
| Aborted_clients  | 1     |
| Aborted_connects | 2     |
+------------------+-------+

結果:Aborted_clients有增加 error log無記錄 ,
類似的,睡眠時間超時後Aborted_clients有增加 error log中有Aborted connection相關記錄。

會話異常退出一般會造成Aborted connection告警,即我們可以通過Aborted_clients狀態變數的變化來反映出是否存在異常會話,那麼出現“_Got an error reading communication packets” _類似告警的原因就很明瞭了,查詢相關資料,總結出造成Aborted connection告警的可能原因如下:

  1. 會話鏈接未正常關閉,程式沒有調用mysql_close()。
  2. 睡眠時間超過wait_timeout或interactive_timeout參數的秒數。
  3. 查詢數據包大小超過max_allowed_packet數值,造成鏈接中斷。
  4. 其他網路或者硬體層面的問題。

3.問題避免與總結

其實Aborted connection告警是很難避免的,error log里或多或少會有少量Aborted connection信息,這種情況是可以忽略的,但是當你的error log里頻繁出現Aborted connection告警,這時候就應該註意了,可能會對業務產生較大的影響。下麵列舉出幾點避免錯誤的建議,希望對你有所幫助。

  1. 建議業務操作結束後,應用程式邏輯會正確關閉連接,以短連接替代長連接。
  2. 檢查以確保max_allowed_packet的值足夠高,並且客戶端沒有收到“數據包太大”消息。
  3. 確保客戶端應用程式不中止連接,例如,如果PHP設置了max_execution_time為5秒,增加connect_timeout並不會起到作用,因為PHP會kill腳本。其他程式語言和環境也有類似的安全選項。
  4. 確保事務提交(begin和commit)都正確提交以保證一旦應用程式完成以後留下的連接是處於乾凈的狀態。
  5. 檢查是否啟用了skip-name-resolve,檢查主機根據其IP地址而不是其主機名進行身份驗證。
  6. 嘗試增加MySQL的net_read_timeout和net_write_timeout值,看看是否減少了錯誤的數量。

參考: 

公眾號.jpg


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1. 使用LocationManager獲取地理位置信息 代碼如下: 註意事項:Manifest文件中添加許可權 2. 使用百度地圖顯示 ①登錄網址 http://lbsyun.baidu.com/apiconsole/key 註冊成為一名百度開發者,並申請API Key,註冊頁面如下 註冊成功,點擊 ...
  • 今天在Nginx上新加了一個功能變數名稱配置,然後nginx -t 檢查時,如下圖: 錯誤原因是:在Nginx配置文件時,有二個重覆的upstream名稱,配置xxx-uat導致,你可以在配置目錄grep下,去掉一個就可以了。如下圖 然後重新 nginx -t 檢查下,就不會報錯了 ...
  • docker的安裝在網上一搜一大把,windows安裝的就是exe雙擊,linux安裝需要執行語句 ps:需要準備xftp、xshell、vs 2019、linux伺服器、docker賬號密碼 例如: 伺服器剛買好時,最好執行一次yum update打開xshell,連接上linux伺服器安裝、運行 ...
  • 一、Oracle VM VirtualBox NatNetwork 設置(提供虛擬主機外網訪問) 1.1、進入全局設定 選擇網路 添加NAT網路 1.2、設置NAT 二、VirtualBox Host-Only設定(提供內網訪問) 2.1、配置Host-Only設置(建議設置順序為 網卡設定 DHC ...
  • 這裡分享嵌入式領域有用有趣的項目/工具以及一些熱點新聞,農曆年分二十四節氣,希望在每個交節之日準時發佈一期。 ...
  • ORA-00001: 違反唯一約束條件 (.) ORA-00017: 請求會話以設置跟蹤事件 ORA-00018: 超出最大會話數 ORA-00019: 超出最大會話許可數 ORA-00020: 超出最大進程數 () ORA-00021: 會話附屬於其它某些進程;無法轉換會話 ORA-00022: ...
  • 問題描述:本來還在愉快的工作中,突然同時通知客戶主資料庫無法登陸了,心中莫名的一緊,趕緊登陸資料庫查看,發現只有sys賬號可以正常登錄,其他賬號登錄均提示ORA00257錯誤。趕緊百度一下,看大致的意思為歸檔日誌寫滿了、閃回日誌寫滿了。根據網上提供的方法進行查看:select * from v$re... ...
  • Mapping (映射)類似關係型資料庫中的表的結構定義。我們將數據以 JSON 格式存入到 ElasticSearch 中後,在搜索引擎中 JSON 欄位映射對應的類型,這時需要 mapping 來定義內容的類型。 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...