首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 監控腳本大全:Shell 命令一鍵掌握效能、連線、複寫、緩衝區命中率等核心指標

     編輯:MySQL 資料庫相關知識

生產級 MySQL 監控腳本庫:從連線數到 Innodb 緩衝區一網打盡

整理自實戰維護經驗,涵蓋服務存活、連線狀態、QPS/TPS、緩衝區命中率、鎖等待、複寫延遲、臨時表、Binlog Cache 等核心指標。所有命令經生產環境驗證,可直接納入 Zabbix/Prometheus/Grafana/自建巡檢系統。

基礎連通與狀態

# 服務存活檢查 (回傳 "mysqld is alive")
mysqladmin -u monitor -p'pwd' -h localhost ping

# 核心狀態快照 (Uptime, Threads, Questions, Opens, Flush tables, Open tables, Queries)
mysqladmin -u monitor -p'pwd' -h localhost status

# 當前連線程序列表 (併發分析首選)
mysqladmin -u monitor -p'pwd' -h localhost processlist

# 按客戶端 IP 統計連線數
mysql -u monitor -p'pwd' -BNe "SELECT host, COUNT(*) FROM information_schema.processlist GROUP BY host;"

# 顯示 Uptime (小時)
mysql -e "SHOW GLOBAL STATUS LIKE 'Uptime'" | awk '/Uptime/ { printf \"%.2f Hours\\n\", $2/3600 }'

資料庫/表級空間佔用

# 各資料庫總大小 (MB, 含資料+索引)
mysql -u monitor -p'pwd' -e "
SELECT table_schema AS 'Database',
       ROUND(SUM(data_length + index_length) / 1024 / 1024, 2) AS 'Size_MB'
FROM information_schema.tables
GROUP BY table_schema;"

# 指定表欄位資訊 (輸出欄位名逗號分隔,適合動態建構 SELECT)
mysql -u user -ppwd -e "SHOW COLUMNS FROM \`table\`" db | awk '{print $1}' | tr "\\n" "," | sed 's/,$//'

備份與匯入匯出

# 執行 SQL 腳本檔
mysql -u user -ppwd < script.sql

# mysqldump 導出 (CSV 格式,指定分隔符/包裹符)
mysqldump -u root -p'pwd' -T /tmp/mysqldump db_name table_name --fields-enclosed-by='\"' --fields-terminated-by=','

# mysqlimport 導入 (對應上述 CSV 格式)
mysqlimport -u root -p'pwd' --fields-enclosed-by='\"' --fields-terminated-by=',' db_name /tmp/table_name.txt

# LOAD DATA INFILE (效能最高,需 FILE 權限且檔案在 Server 端)
LOAD DATA INFILE '/tmp/table_name.txt' INTO TABLE table_name FIELDS TERMINATED BY ',' ENCLOSED BY '\"';

進程與系統層面

# mysqld_safe 守護進程
ps -ef | grep mysqld_safe | grep -v grep

# mysqld 主進程 (排除 safe)
ps -ef | grep mysqld | grep -v mysqld_safe | grep -v grep

核心效能指標公式與採集命令

指標公式健康基線採集命令
QPS (Queries Per Second)Questions / Uptime視業務而定,突增需告警mysql -e "SHOW GLOBAL STATUS LIKE 'Questions'" 配合 Uptime 計算
Key Buffer 讀命中率(1 - Key_reads / Key_read_requests) * 100%> 99%mysql -e "SHOW GLOBAL STATUS LIKE 'Key_read%'"
Key Buffer 寫命中率(1 - Key_writes / Key_write_requests) * 100%> 99%mysql -e "SHOW GLOBAL STATUS LIKE 'Key_write%'"
InnoDB Buffer Pool 讀命中率(1 - Innodb_buffer_pool_reads / Innodb_buffer_pool_read_requests) * 100%> 99.9%mysql -e "SHOW GLOBAL STATUS LIKE 'Innodb_buffer_pool_read%'"
Query Cache 命中率Qcache_hits / (Qcache_hits + Qcache_inserts) * 100%> 80% (若啟用 QC)mysql -e "SHOW GLOBAL STATUS LIKE 'Qcache%'"
Table Open Cache 狀態Open_tables / Opened_tablesOpen_tables 接近 table_open_cache 設定值需擴容mysql -e "SHOW GLOBAL STATUS LIKE 'Open%'"
Thread Cache 命中率(1 - Threads_created / Connections) * 100%> 90%mysql -e "SHOW GLOBAL STATUS LIKE 'Thread%'"
鎖狀態Table_locks_waited / Table_locks_immediate待鎖比例 < 1%mysql -e "SHOW GLOBAL STATUS LIKE '%lock%'"
複寫延遲Seconds_Behind_Master= 0 (或 < 1s)在 Slave 執行:mysql -e "SHOW SLAVE STATUS\\G"
臨時表磁盤化比例Created_tmp_disk_tables / Created_tmp_tables< 10%mysql -e "SHOW GLOBAL STATUS LIKE 'Created_tmp%'"
Binlog Cache 使用Binlog_cache_use / Binlog_cache_disk_use磁盤化比例低mysql -e "SHOW GLOBAL STATUS LIKE 'Binlog_cache%'"
InnoDB Log 等待Innodb_log_waits= 0mysql -e "SHOW GLOBAL STATUS LIKE 'Innodb_log_waits'"

維護工具

# mysqlcheck 檢查/修復/分析/優化 所有資料庫所有表
mysqlcheck -u root -p'pwd' --all-databases --auto-repair --analyze --optimize

腳本庫專案

完整腳本集已開源:https://github.com/zhwj184/shell-work

  • shell 常用分析命令
  • MySQL 監控腳本 (本文核心)
  • Cookie 日誌分析
  • Java 進程 Dump / 機器資訊 Dump
  • CPU 監控、磁碟管理

最佳實踐建議

  1. 專用監控帳號:`GRANT PROCESS, REPLICATION CLIENT, SELECT ON *.* TO 'monitor'@'%' IDENTIFIED BY 'strong_pwd';` 最小權限原則。
  2. 固定採集間隔:建議 60 秒,計算速率指標 (QPS、命中率) 時需兩次採集差值 / 間隔秒數。
  3. 指標歸一化:所有計數器均為累計值,監控系統必須做「每秒速率」轉換 (Rate/Delta)。
  4. 告警分級:P0 (服務掛了、複寫中斷、Innodb_log_waits>0)、P1 (命中率跌破基線、連線數逼近上限)、P2 (臨時表磁盤化上升、緩慢增長趨勢)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved