首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL 性能監控腳本:基於 mysqladmin 實現實時指標採集

     編輯:MySQL 綜合教學

前言

在日常運維中,快速掌握 MySQL 實例的運行狀態至關重要。雖然有諸如 Prometheus + Grafana、Percona Monitoring and Management (PMM) 等成熟的監控體系,但在臨時排查、無法部署重組件或需要極簡依賴的場景下,一個基於原生工具 mysqladmin 的 Shell 腳本往往能發揮「四兩撥千斤」的效果。本文分享一個輕量級的 MySQL 性能查詢腳本,能夠每秒輸出 QPS、增刪改查計數、InnoDB 行操作及緩衝池讀取情況等關鍵指標。

腳本核心原理

腳本利用 mysqladmin extended-status 配合 -r (relative) 和 -i 1 (interval 1 second) 參數,獲取服務器狀態變量的增量值。通過 awk 解析輸出,提取所需計數器並按固定格式打印,實現類似 vmstat / iostat 風格的實時滾動輸出。

完整腳本代碼

#!/bin/sh
mysqladmin -P3306 -uroot -p'password' -r -i 1 ext | \
awk -F"|" '
BEGIN { count=0; }
{
    if ($2 ~ /Variable_name/ && ((++count)%20 == 1)) {
        print "----------|---------|--- MySQL Command Status --|----- Innodb row operation ----|-- Buffer Pool Read --";
        print "---Time---|---QPS---|select insert update delete| read inserted updated deleted| logical physical";
    }
    else if ($2 ~ /Queries/) { queries=$3; }
    else if ($2 ~ /Com_select/) { com_select=$3; }
    else if ($2 ~ /Com_insert/) { com_insert=$3; }
    else if ($2 ~ /Com_update/) { com_update=$3; }
    else if ($2 ~ /Com_delete/) { com_delete=$3; }
    else if ($2 ~ /Innodb_rows_read/) { innodb_rows_read=$3; }
    else if ($2 ~ /Innodb_rows_deleted/) { innodb_rows_deleted=$3; }
    else if ($2 ~ /Innodb_rows_inserted/) { innodb_rows_inserted=$3; }
    else if ($2 ~ /Innodb_rows_updated/) { innodb_rows_updated=$3; }
    else if ($2 ~ /Innodb_buffer_pool_read_requests/) { innodb_lor=$3; }
    else if ($2 ~ /Innodb_buffer_pool_reads/) { innodb_phr=$3; }
    else if ($2 ~ /Uptime/ && count >= 2) {
        printf(" %s |%9d", strftime("%H:%M:%S"), queries);
        printf("|%6d %6d %6d %6d", com_select, com_insert, com_update, com_delete);
        printf("|%6d %8d %7d %7d", innodb_rows_read, innodb_rows_inserted, innodb_rows_updated, innodb_rows_deleted);
        printf("|%10d %11d\n", innodb_lor, innodb_phr);
    }
}'

輸出示例

執行後將輸出如下格式的實時數據(截圖來源原文):

MySQL 性能腳本輸出示例

關鍵指標解讀

列組指標含義
MySQL Command StatusQPS每秒查詢總數,包含所有類型的 SQL 語句
Com_select / insert / update / delete每秒 SELECT/INSERT/UPDATE/DELETE 執行次數
InnoDB Row OperationRows read / inserted / updated / deleted存儲引擎層面的行讀寫量,比 Com_* 更精確反映底層負載
Buffer Pool ReadLogical reads邏輯讀請求數,即從緩衝池滿足的讀取
Physical reads物理讀次數,需從磁盤加載頁面,關係到 I/O 壓力

使用建議與擴展

  • 權限最小化:生產環境建議創建專用監控賬號,僅授予 PROCESS、REPLICATION CLIENT 權限。
  • 持久化記錄:將輸出重定向至文件(>> mysql_perf.log),配合 logrotate 實現歷史歸檔。
  • 告警集成:在 awk 中加入閾值判斷,超標時調用 Webhook 或發送郵件。
  • 多實例巡檢:封裝為函數,遍歷實例列表並行採集,彙總至中央日志平台。

總結

這個腳本零依賴、啟動即用,適合應急排查、臨時性能基線建立或作為輕量級監控組件的補充。掌握 mysqladmin extended-status 的輸出結構,你還可以輕鬆擴展出更多自定義指標(如臨時表創建數、鎖等待時間、線程並發數等),打造屬於自己的「瑞士軍刀」監控工具箱。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved