總覽#

MySQL 伺服器發行版本身並未內建許多常見管理任務的工具(如監控、資料比對等)。好在 Oracle 的商業產品、活躍的開源社群以及第三方公司提供了大量工具,減少了自行開發的需求。本章涵蓋介面工具命令列工具監控系統以及 innotop 的深入介紹。

作者在接手新伺服器時,第一件事就是執行 pt-summarypt-mysql-summary;如果正在操作伺服器,則會在另一個終端機開著 innotop 監看。


介面工具(Interface Tools)#

介面工具協助你執行查詢、建立表格與使用者等日常任務。這些工具本質上只是增加便利性,多數功能都能用 SQL 指令達成。

工具說明
MySQL WorkbenchOracle 官方的全能工具,支援伺服器管理、查詢撰寫、stored procedure 開發、schema 圖表。提供 plugin 介面(Python),社群版已足夠大多數需求使用
SQLyog與 MySQL Workbench 同級的視覺化工具,功能各有千秋,僅支援 Windows
phpMyAdmin基於瀏覽器的管理介面,功能強大但體積龐大,曾有許多安全漏洞。絕對不要安裝在可從網際網路存取的位置
Adminer輕量且更安全的 phpMyAdmin 替代方案,同樣建議避免放在公開位置

phpMyAdmin 是安全性高風險工具。即使是 Adminer 等替代方案,也不應直接暴露在公共網路上。


命令列工具(Command-Line Utilities)#

MySQL 本身附帶 mysqladminmysqlcheck 等工具,社群則發展出更完善的工具集:

Percona Toolkit#

Percona Toolkit 是 MySQL 管理員的必備工具集,由早期的 MaatkitAspersa 合併而來。包含日誌分析、複製完整性檢查、資料同步、schema 與索引分析、查詢建議、資料歸檔等功能。

書中建議新手優先學習以下四個工具:

工具用途
pt-mysql-summary快速產出 MySQL 伺服器摘要報告
pt-table-checksum檢驗主從複製資料一致性
pt-table-sync同步不同伺服器之間的資料
pt-query-digest分析慢查詢日誌,找出效能瓶頸

Percona Toolkit 在書中多個章節被反覆提及,是本書作者實務中最常使用的工具集。如果你只能學一套第三方工具,選 Percona Toolkit。

其他命令列工具#

  • openark kit — Shlomi Noach 的 Python 工具集,涵蓋多種管理任務
  • MySQL Workbench utilities — 部分 Workbench 工具可作為獨立 Python 腳本使用

SQL 工具(SQL Utilities)#

可直接在伺服器內部使用的免費附加工具:

工具說明
common_schemaShlomi Noach 開發的一組強大 routine 和 view,被作者類比為「MySQL 的 jQuery」,是伺服器腳本與管理的利器
mysql-sr-libGiuseppe Maxia 建立的 stored routine 函式庫
UDF repositoryRoland Bouman 整理的 user-defined functions 集合
MySQL Forge社群貢獻的程式、腳本、snippets 彙集處

監控工具(Monitoring Tools)#

MySQL 環境主要需要兩類監控:

  1. 健康監控(Health Monitoring) — 偵測異常並發出警報
  2. 指標記錄(Metrics Recording) — 用於趨勢分析、診斷、容量規劃

大多數監控系統只擅長其中一類,很難兩者兼顧。選擇時需清楚你的主要需求。

開源全功能監控系統#

Nagios#

可能是最受歡迎的開源告警系統,透過定期檢查服務並與閾值比較來偵測問題。

優點:

  • 靈活的聯絡人與告警升級機制
  • 可依時段、條件切換告警方式
  • 理解服務間的依賴關係(例如路由器斷線時不會重複告警 MySQL)
  • Plugin 系統簡單,任何語言的可執行檔都能成為 plugin

缺點:

  • 設定全部存在檔案中(非資料庫),維護困難
  • 特殊語法容易出錯,隨系統成長維護成本高
  • 擴展性有限,主要只能寫 plugin
  • 圖表和趨勢分析能力弱
  • 政治問題導致多次 fork(OpsviewIcinga

Zabbix#

全功能監控與指標收集系統。設定存於資料庫、資料型態更豐富、網路圖形化能力優於 Nagios、許多人覺得更易設定且更具彈性。

Zenoss#

Python 撰寫,Ajax 瀏覽器介面。支援自動探索網路資源,整合監控、告警、趨勢、圖表於一體。支援 SNMP、SSH 以及 Nagios plugin。

其他#

  • Hyperic HQ — Java 實作,偏向企業級監控
  • OpenNMS — Java 實作,強調高效能、可擴展、自動化
  • Groundwork Open Source — 整合 Nagios、Cacti 等多種工具的入口系統

RRDTool 系列(指標圖表系統)#

這類系統聚焦在指標收集與視覺化,而非健康檢查。均基於 RRDTool(Round-Robin Database),特色是自動聚合資料、插值缺失值、產出精美圖表。

工具特色
MRTG經典的 RRDTool 工具,原設計用於網路流量記錄
Cacti最受歡迎的 RRDTool 系統,PHP 網頁介面,模板驅動。作者 Baron 開發了廣受歡迎的 MySQL 模板
Ganglia設計用於叢集與網格監控,可聚合與下鑽
Munin自動產出靜態 HTML 圖表,plugin 定義簡單

RRDTool 系統的限制:

  • 無法用標準查詢語言查詢資料
  • 無法永久保存資料
  • 指標和圖表需預先定義
  • 對非簡單計數器/量表型資料支援不佳

作者提到 Graphite 是最接近理想監控系統的方案 — 可接受任意指標、無需預先定義、事後任意繪圖。

商業監控系統#

工具說明
MySQL Enterprise MonitorOracle 訂閱服務的一部分,整合監控、指標、advisory、查詢分析。使用 agent 收集資料,可透過 MySQL Proxy 或 Connector 擷取查詢
MONyog無 agent 的瀏覽器監控系統,由 Webyog 開發
New RelicSaaS 應用效能管理,可分析從前端 JS 到後端 SQL 的完整效能鏈
CirconusOmniTI 的 SaaS 指標與告警系統
Monitis雲端 SaaS 監控,設計為「監控一切」
Splunk日誌聚合與搜尋引擎,用於運維洞察
Pingdom從全球各地監控網站可用性與效能

注意監控工具本身對伺服器的影響。有些工具每分鐘對所有資料庫執行 SHOW TABLE STATUS,這在大型 I/O 密集系統上會造成嚴重效能問題。頻繁查詢 INFORMATION_SCHEMA 表也可能有負面影響。


命令列監控:innotop#

innotop 是最精密的命令列監控工具,以即時更新的方式顯示伺服器狀態,功能遠超 mytop 等前輩。儘管名稱含 “Inno”,它不僅限於 InnoDB,可監控 MySQL 的幾乎所有面向。

核心功能#

功能說明
交易清單顯示目前 InnoDB 交易
查詢清單顯示正在執行的查詢
鎖定清單顯示目前的鎖定與鎖定等待
伺服器狀態摘要以相對比例顯示各值
InnoDB 內部資訊緩衝區、deadlock、外鍵錯誤、I/O 活動、行操作、semaphore 等
複製監控同時顯示 master 和 slave 狀態
自訂變數可查看任意伺服器變數
伺服器分組方便管理多台伺服器
非互動模式可用於命令列腳本

安裝#

# 從套件庫安裝,或下載後手動安裝
perl Makefile.PL
make install

T 模式(Transaction 模式)#

啟動 innotop 後預設進入 T 模式,顯示 InnoDB 交易清單。預設會過濾掉非活躍交易,按 i 鍵可取消過濾顯示所有交易。

標頭列顯示 InnoDB 整體資訊:history list 長度、未 purge 的交易數、buffer pool 中 dirty page 百分比等。

Figure 16.1: innotop in T (Transaction) mode

幫助畫面#

在任何模式下按 ? 可查看幫助畫面,顯示當前模式所有可用按鍵與操作。

Figure 16.2: innotop help screen

Q 模式(Query List 模式)#

Q 進入 Query List 模式,標頭列顯示伺服器整體統計資訊,分為:

  • Now — 上次刷新後的增量活動
  • Total — 自 MySQL 啟動以來的累計數據

每個標頭欄位都由 SHOW STATUSSHOW VARIABLES 的值運算得出。

Figure 16.3: innotop in Q (Query List) mode

自訂標頭列#

innotop 最大的優勢之一是支援使用者自訂表達式。例如 Uptime/Questions 可推導出每秒查詢數,且能同時顯示累計值與增量值。

以下示範在 Q 模式新增一個顯示 key cache 使用率的欄位:

  1. 進入 Q 模式後按 ^ 啟動表格編輯器
  2. 輸入 q_header 選擇要編輯的標頭表格(支援 Tab 補全)

Figure 16.4: Adding a header (start)

  1. 看到表格定義後,按 n 建立新欄位,輸入欄位名稱

Figure 16.5: Adding a header (choices)

Figure 16.6: Adding a header (naming column)

  1. 輸入欄位標頭文字(顯示在欄位頂端)

Figure 16.7: Adding a header (text for column)

  1. 輸入表達式 — 可使用 SHOW VARIABLESSHOW STATUS 的變數名稱作為方程式中的變數,並用 percent() 等內建轉換函式格式化輸出

Figure 16.8: Adding a header (expression to calculate)

  1. 按 Enter 後用 + 鍵調整欄位位置,按 q 離開表格編輯器即可看到結果

Figure 16.9: Adding a header (result)

innotop 還支援 plugin 系統,如果內建功能不足,可撰寫 plugin 擴充。


本章重點摘要#

  • 工具選擇原則 — 優先使用已被廣泛測試且流行的既有工具,不要自己重造輪子
  • Percona Toolkit 是最重要的第三方工具集,pt-mysql-summarypt-table-checksumpt-table-syncpt-query-digest 是入門必學
  • 監控需求二分法 — 健康告警用 Nagios(搭配 Cacti),或用 Zabbix 一體化方案;商業工具推薦 MySQL Enterprise Monitor
  • innotop 是最強大的命令列即時監控工具,支援高度自訂
  • 注意監控工具的副作用 — 某些工具的資料收集行為可能對 I/O 密集型系統造成嚴重效能影響
  • 建議搭配外部監控服務(如 Pingdom)從外部監測網站可用性