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

使用腳本監控 MySQL 狀態:mysqladmin 與 Python 實戰指南

     編輯:MySQL 綜合教學

使用腳本監控 MySQL 狀態:mysqladmin 與 Python 實戰指南

監控 MySQL 運行狀態是資料庫運維的核心任務之一。本文介紹兩種主流腳本方案:基於 mysqladmin 的輕量級 Shell 腳本,以及功能更豐富的 Python 互動式監控工具 mysqlstatus.py。兩者各有優勢,可根據場景選擇。

一、mysqladmin 方案:簡單高效的差值監控

mysqladmin extended-status 可輸出所有全域狀態變數(相當於 SHOW GLOBAL STATUS)。但大多數指標為累計值,若要掌握當前每秒增量,需配合 -r (--relative) 參數進行差值計算,並用 -i (--sleep) 指定刷新頻率。

1. 基礎配置(MySQL 5.7 為例)

在 [mysqldump] 區段設定連線帳號,避免命令列明文密碼:

[mysqldump]
user=root
password=123456

2. 單行命令快速檢視

mysqladmin -r -i 1 extended-status

每秒刷新一次,顯示所有狀態變數的每秒增量。

3. 進階 AWK 腳本:定製化關鍵指標儀表板

以下腳本提取 QPS、TPS、各類 DML 計數、InnoDB 緩衝池命中率、線程數等核心指標,並格式化輸出:

#!/bin/bash
# author: pingzhao1990@163.com
mysqladmin extended-status -i1 | awk '
BEGIN { local_switch=0 }
$2 ~ /Queries$/           { q=$4-lq; lq=$4; }
$2 ~ /Com_commit$/        { c=$4-lc; lc=$4; }
$2 ~ /Com_rollback$/      { r=$4-lr; lr=$4; }
$2 ~ /Com_select$/        { s=$4-ls; ls=$4; }
$2 ~ /Com_update$/        { u=$4-lu; lu=$4; }
$2 ~ /Com_insert$/        { i=$4-li; li=$4; }
$2 ~ /Com_delete$/        { d=$4-ld; ld=$4; }
$2 ~ /Innodb_rows_read$/  { irr=$4-lirr; lirr=$4; }
$2 ~ /Innodb_rows_deleted$/{ ird=$4-lird; lird=$4; }
$2 ~ /Innodb_rows_inserted$/{ iri=$4-liri; liri=$4; }
$2 ~ /Innodb_rows_updated$/{ iru=$4-liru; biru=$4; }
$2 ~ /Innodb_buffer_pool_read_requests$/ { ibprr=$4-libprr; libprr=$4; }
$2 ~ /Innodb_buffer_pool_reads$/       { ibpr=$4-libpr; libpr=$4; }
$2 ~ /Threads_connected$/  { tc=$4; }
$2 ~ /Threads_running$/    { tr=$4;
    if (local_switch==0) { local_switch=1; count=16 }
    else {
        if (count>15) {
            count=0;
            print "------------------------------------------------------------------------------------------------------------------------------------";
            print "Time-----| QPS | Commit Rollback TPS | select insert update delete | read inserted updated deleted | logical physical | Tcon Trun";
            print "------------------------------------------------------------------------------------------------------------------------------------";
        } else {
            count+=1;
            printf "%s | %-5d| %-6d %-7d %-5d| %-7d %-7d %-5d %-6d| %-7d %-7d %-7d %-7d| %-6d %-9d| %-4d %-2d \\n",
                strftime("%H:%M:%S"), q, c, r, c+r, s, u, i, d, irr, ird, iri, iru, ibprr, ibpr, tc, tr;
        }
    }
}'

4. 輸出範例

------------------------------------------------------------------------------------------------------------------------------------
Time-----| QPS | Commit Rollback TPS | select insert update delete | read inserted updated deleted | logical physical | Tcon Trun
------------------------------------------------------------------------------------------------------------------------------------
11:07:39 | 792 | 0 0 0 | 680 12 8 1 | 337862 0 2 2 | 52243 0 | 20 3
11:07:40 | 792 | 0 0 0 | 665 6 1 1 | 1338 0 1 3 | 2548 0 | 18 3
11:07:41 | 755 | 0 0 0 | 680 6 4 0 | 254448 0 4 6 | 88879 0 | 16 3
...

此腳本適合快速排查性能抖動,無需額外依賴。

二、Python 互動式監控工具:mysqlstatus.py

當需要更豐富的互動操作(如切換 SHOW PROCESSLIST、調整刷新間隔、彩色終端顯示)時,mysqlstatus.py 是更佳選擇。它基於 curses 庫實現終端 UI,支援互動模式與非互動(CLI)模式雙模運行。

1. 環境準備(Python 2.7 + MySQLdb)

# 安裝 Python 2.7
wget https://www.python.org/ftp/python/2.7.8/Python-2.7.8.tar.xz
xz -d Python-2.7.8.tar.xz && tar -xvf Python-2.7.8.tar
cd Python-2.7.8 && ./configure --prefix=/usr/local && make && make altinstall

# 安裝 setuptools & pip
wget --no-check-certificate https://pypi.python.org/packages/source/s/setuptools/setuptools-1.4.2.tar.gz
tar -xvf setuptools-1.4.2.tar.gz && cd setuptools-1.4.2 && python2.7 setup.py install
curl https://raw.githubusercontent.com/pypa/pip/master/contrib/get-pip.py | python2.7 -

# 修復 yum(將 shebang 改為 python2.6)
which yum
# 編輯 /usr/bin/yum,首行改為 #!/usr/bin/python2.6

# 安裝 MySQLdb
pip install mysql-python

2. 核心功能

  • 雙模式監控:status(預設,顯示 SHOW GLOBAL STATUS 關鍵指標)與 process(顯示 SHOW FULL PROCESSLIST)一鍵切換(按 s/p)。
  • 即時 QPS 計算:透過對比兩次 Uptime 與 Questions 差值得出精確 QPS。
  • 彈性配置:支援主機、埠、用戶、密碼、刷新間隔、輸出檔案等命令列參數。
  • 非互動模式:加 -n 參數可將結果導向標準輸出或檔案,便於整合到監控系統。

3. 執行範例

# 互動模式(預設)
python mysqlstatus.py -h 127.0.0.1 -u root -P password -i 1

# 非互動模式,輸出到檔案
python mysqlstatus.py -n -o /var/log/mysql_status.log -i 5

4. 互動模式畫面示例

localhost.localdomain, 2015-12-29 00:12:24, 5.6.25-log
----------------------------------------------------------------------
QPS                   : 1.00
Aborted_connects      : 1
Binlog_cache_disk_use : 0
Bytes_received        : 21450
Bytes_sent            : 4321757
Connections           : 40
Created_tmp_disk_tables: 0
...
Threads_connected     : 1
Threads_running       : 1
Uptime                : 3600

按 h 或 ? 顯示幫助,q 退出。

三、選型建議

場景推薦工具理由
臨時排查、極簡依賴mysqladmin + AWK零安裝、輕量、輸出可直接導入試算表分析
長期監控、需互動/導出mysqlstatus.py支援 Processlist、彩色 UI、非互動模式易整合
圖形化儀表板Prometheus + Grafana + mysqld_exporter歷史趨勢、告警、多實例聚合

掌握這兩種腳本,即可覆蓋從「臨時看一眼」到「持續監控」的大多數需求。建議將 AWK 腳本納入運維工具箱,將 mysqlstatus.py 部署為跳板機常駐工具。

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