MySQL收集processlist記錄的shell工具mysql_collect_processlist

文章目錄

    • 安裝指南
    • 日志文件內容
    • 日志分析參考
      • 1.簡單檢索
      • 2.統計不同狀態的語句的數量
      • 3.按照時間統計
    • 注意事項
    • 倉庫


這是一個純腳本工具,用于從MySQL的information_schema.processlist視圖中定期收集數據并保存到本地日志文件。支持MYSQL5.7-9.4版本。

template copy from PostgreSQL version : https://github.com/yansheng836/pg_collect_pgsa .

相關背景

  1. 某個慢SQL打滿內存,導致系統kill掉mysql的進程,進而導致mysql進程重啟,沒有現場排查不了具體原因。(即使開啟了慢SQL日志,沒有執行完也不會記錄到數據庫日志中)
  2. 數據庫連接數被打滿,MYSQL相關監控數據丟失(因為也連不上數據庫了),沒有現場,不知道異常請求來源。

特性

  • 定期收集MySQL活動會話信息
  • 支持通過定時任務配置收集頻率
  • 提供日志文件自動分割功能
  • 包含豐富的日志分析示例

安裝指南

拉取代碼,修改參數,設置定時任務。

# 克隆代碼
git clone git@github.com:yansheng836/mysql_collect_processlist.git
cd mysql_collect_processlist# 修改必要參數(均以 MYSQL_ 開頭,例如:MYSQL_PATH、MYSQL_HOST 等)
vi mysql_collect_processlist.sh# 查路徑
pwd# crontab -e
# 每分鐘執行
* * * * * sh pwd路徑/mysql_collect_processlist.sh# 如果需要更頻繁,比如每5秒執行(可自行調整秒數)
* * * * * sh pwd路徑/mysql_collect_processlist_gap_second.sh 5

日志文件內容

測試版本:mysql Ver 8.0.43 for Linux on x86_64 (MySQL Community Server - GPL)

CI版本:MYSQL5.7-9.4

輸出字段為:now(),ID,USER,HOST,DB,COMMAND,TIME,STATE,INFO

2025-09-09 14:44:02|42|root|localhost|mysql|Query|0|executing|SELECT now(),ID,USER,HOST,DB,COMMAND,TIME,STATE,INFO from information_schema.processlist
2025-09-09 14:44:02|5|event_scheduler|localhost|NULL|Daemon|8000|Waiting on empty queue|NULL

日志分析參考

1.簡單檢索

# cat/more/less/grep 
grep 'executing' processlist.log# 查找具體時間的相關日志
grep '2025-09-04 12:59' processlist.log# 在歸檔日志中,查找具體時間的相關日志
zless logs/processlist-20250904-12.log.gz  | grep '2025-09-04 12:59'

2.統計不同狀態的語句的數量

# 第8列是狀態:state
awk -F '|' '{print $8}' processlist.log | sort | uniq -c1 executing1 Waiting on empty queue

3.按照時間統計

# 按天統計
awk -F '|' '{print $1}' processlist.log | cut -d ' ' -f1 | sort | uniq -c2 2025-09-09
# 按小時統計
awk -F '[| ]' '{print $1 " " $2}' processlist.log | cut -d: -f1 | sort | uniq -c2 2025-09-09 14
# 按分鐘統計
awk -F '[| ]' '{print $1 " " $2}' processlist.log | cut -d: -f1-2 | sort | uniq -c2 2025-09-09 14:44

注意事項

  1. 在業務繁忙的數據庫上使用時,需要注意日志文件可能會快速增長,建議在特殊情況下短暫使用,并密切關注磁盤空間。

  2. info字段的長度受MySQL常量PROCESS_LIST_INFO_WIDTH限制,默認為65535(寫死在源碼中),超出部分會被截斷。(足以滿足絕大多數場景。)

  3. 賬號權限問題,可不使用mysql。推薦最小權限:[創建空庫,]創建普通用戶,授予PROCESS權限即可。

    -- CREATE DATABASE processlist_db;
    GRANT PROCESS ON *.* TO 'processlist_user'@'hostname';
    

倉庫

詳見::

GitHub:https://github.com/yansheng836/mysql_collect_processlist/issues

Gitee:https://gitee.com/yansheng0083/mysql_collect_processlist/issues

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/96313.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/96313.shtml
英文地址,請注明出處:http://en.pswp.cn/web/96313.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

工業RFID現場網關模塊:實現多協議互通,128臺讀寫設備互連!

隨著工業4.0進程加速,企業對生產系統集成度的需求不斷增長。在工廠中常需整合不同品牌PLC、驅動器、機械臂、讀寫器等設備系統,這其中就會涉及到如Profinet、EtherNet/IP、EtherCAT、Modbus TCP、CC-LINK IE等不同通訊協議連接。雖可將部分設備直接與PLC…

黑馬點評高級篇第7節課 輸入INFO replication 顯示0個從節點,但是在7002節點又顯示它已經是7001節點的從節點了

問題描述在黑馬點評高級篇第七節課的這個位置??????,當我輸入INFO replication 的時候下面本應該顯示為connected_slaves: 2,但是我的顯示的是0。然后當我切換到7002端口的節點時,又顯示7002就是7001的從節點解決我看彈幕上說在7002和7…

pcb線路板打樣廠家有哪些?

在電子制造產業升級浪潮中,PCB打樣環節的效率與品質直接影響產品迭代速度。本文聚焦國內五家具備核心技術競爭力的PCB打樣廠商,深度解析其差異化優勢,為硬件開發者提供精準選型參考。獵板PCB作為國家高新技術企業,獵板PCB在高頻高…

【python實用小腳本-211】[硬件互聯] 桌面壁紙×Python夢幻聯動|用10行代碼實現“開機盲盒”自動化改造實錄(建議收藏)

1. 場景故事 “作為HR,我曾每天手動換壁紙提神,直到某天忙到忘記,結果被同事截圖當‘黑歷史’…” → 轉折點:用Python調用Windows API寫了個“隨機壁紙機”,開機自啟,每次登錄都是新風景,現在截…

集成學習 —— 梯度提升樹GBDT、XGBoost

目錄 一、梯度提升樹 1、殘差提升樹 Boosting Decision Tree 2、梯度提升樹 Gradient Boosting Decision Tree 二、構建案例 1、 初始化弱學習器(CART樹): 2、 構建第1個弱學習器 3、 構建第2個弱學習器 4、 構建第3個弱學習器 5、 構建最終弱學習器 6、 構…

【船類】監控錄像下船舶類別檢測識別數據集:近7k圖像,6類,yolo標注

監控錄像下船舶類別檢測識別數據集概述 數據集包含 6900監控錄像下船舶類別圖像,6個標注類別: 散貨船、集裝箱船、漁船、雜貨船、礦砂船、客船 標注格式:yolo txt(格式可轉,可直接訓練) 標注工具&#…

用戶故事設計范式(As a... I want to... So that...)

我們來詳細解析一下用戶故事(User Story),包括其結構、為什么重要、如何編寫好的用戶故事以及一個完整的示例。1. 用戶故事的基本結構:三段式模板最經典和通用的用戶故事模板就是您提到的三段式:As a [角色]:目的&…

【OpenGL】LearnOpenGL學習筆記20 - 實例化 Instancing

上接:https://blog.csdn.net/weixin_44506615/article/details/151156446?spm1001.2014.3001.5501 完整代碼:https://gitee.com/Duo1J/learn-open-gl | https://github.com/Duo1J/LearnOpenGL 實例化 Instancing 以往當我們在場景中要大量繪制相同模型…

MySQL主從不一致?DBA急救手冊:14種高頻坑點+3分鐘定位+無損修復!

MySQL「主從不一致」最常見的成因、快速定位思路以及可落地的修復手段 一、為什么會不一致?14 類高頻場景類別典型表現/觸發條件快速自檢命令/日志1. 從庫被寫入業務或 DBA 直連從庫 UPDATE/INSERTSHOW VARIABLES LIKE read_only 應為 ON2. 復制過濾規則主從 binlog…

AI 網站源碼:探秘 SUNO,革新音樂創作的 AI 先鋒

在當今數字化浪潮中,人工智能(AI)正深刻地重塑各個領域,音樂創作也不例外。SUNO 作為一款引領潮流的音樂生成工具,宛如一顆璀璨新星,在音樂創作的天空中熠熠生輝,為音樂愛好者和創作者們帶來了前…

Linux:malloc背后的實現細節

目錄前言一、先搞懂基礎:程序的內存布局(關鍵前提!)二、malloc的核心實現步驟(4層架構拆解)第1層:用戶調用 → 標準庫處理(glibc的malloc.c)第2層:堆內存池管…

什么是X11轉發?

X11 轉發(X11 forwarding,ssh -X)是一種 SSH 協議功能,它允許用戶在遠程服務器上運行圖形化應用程序,并通過本地的顯示設備和輸入輸出設備與這些程序進行交互。它被開發者廣泛使用,用于在大規模、異構的服務…

Android Kotlin 動態注冊 Broadcast 的完整封裝方案

在 Kotlin 中封裝動態注冊的 Broadcast 可以讓你更優雅地管理廣播的注冊和注銷,避免內存泄漏。下面是一個完整的封裝方案: 基礎封裝類 import android.content.BroadcastReceiver import android.content.Context import android.content.Intent import …

VGG改進(8):融合Self-Attention的CNN架構

1. 自注意力機制簡介自注意力機制是Transformer架構的核心組件,它能夠計算輸入序列中每個元素與其他所有元素的相關性。與CNN的局部感受野不同,自注意力機制允許模型直接建立遠距離依賴關系,從而捕獲全局上下文信息。在計算機視覺中&#xff…

ES6 面試題及詳細答案 80題 (33-40)-- Symbol與集合數據結構

《前后端面試題》專欄集合了前后端各個知識模塊的面試題,包括html,javascript,css,vue,react,java,Openlayers,leaflet,cesium,mapboxGL,threejs&…

PG-210-HI 山洪預警系統呼叫端:筑牢山區應急預警 “安全防線”

在山洪災害多發的山區,及時、準確的預警信息傳遞是保障群眾生命財產安全的關鍵。由 PG-210-HI 型號構成的山洪預警系統呼叫端主機,憑借其全面的功能、先進的特性與可靠的性能,成為連接管理員與群眾的重要應急樞紐,為山區構建起一道…

研學旅游產品設計實訓室:賦能產品落地,培養實用人才

1. 研學旅游產品設計實訓室的定位與功能 研學旅游產品設計實訓室是專門為學生提供研學課程與產品開發、模擬設計、項目推演、成果展示等實踐活動的教學空間。該實訓室應支持以下功能: 研學主題設計與目標制定; 課程內容與學習方法的選擇與整合&#xf…

4215kg輕型載貨汽車變速器設計cad+設計說明書

第一章 前言 3 1.1 變速器的發展環繞現狀 3 1.2 本次設計目的和意義 4 第二章 傳動機構布置方案分析及設計 5 2.1 傳動機構結構分析與類型選擇 5 2.2變速器主傳動方案的選擇 5 2.3 倒檔傳動方案 6 2..4 變速器零、部件結構方案設計 6 2.4.1 齒輪形式 …

9月10日

TCP客戶端代碼#include<myhead.h> #define SER_IP "192.168.108.179" //服務器&#xff49;&#xff50;地址 #define SER_PORT 8888 //服務器端口號 #define CLI_IP "192.168.108.239" //客戶端&#xff49;&#xff50;地址 …

案例開發 - 日程管理 - 第七期

項目改造&#xff0c;進入 demo-schedule 項目中&#xff0c;下載 pinia 依賴在 main.js 中開啟 piniaimport { createApp } from vue import App from ./App.vue import router from ./router/router.js import {createPinia} from pinialet pinia createPinia() const app …