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

MySQL mysql_stat() 獲取服務器狀態:語法、返回值與實戰監控

     編輯:MySQL 資料庫相關知識

mysql_stat() 是 PHP 早期擴展提供的輕量級函數,用於快速獲取 MySQL 服務器核心運行狀態字符串。本文詳細講解語法、參數、返回格式、解析方法及現代監控替代方案。

一、 函數定義與語法

string mysql_stat([resource $link_identifier = NULL])
  • 參數: $link_identifier — 可選,MySQL 連接資源。省略時使用最近打開的連接。
  • 返回值: 成功返回狀態字符串;失敗返回 false。

二、 返回字符串格式解析

典型輸出範例:

Uptime: 99410 Threads: 1 Questions: 162
Slow queries: 0 Opens: 0 Flush tables: 1
Open tables: 0 Queries per second avg: 0.002
字段含義關注重點
Uptime服務器運行秒數排查意外重啟
Threads當前連接線程數連接池使用率、最大連接數壓力
Questions啟動以來總查詢數QPS 計算基數
Slow queries慢查詢數量性能調優核心指標
Opens打開表數量table_open_cache 效果
Flush tablesFLUSH TABLES 執行次數運維操作追蹤
Open tables當前打開表數佔用情況
Queries per second avg平均 QPS負載基線

三、 PHP 實戰代碼範例

<?php
$con = mysql_connect("localhost", "hello", "321");
if (!$con) {
    die('Could not connect: ' . mysql_error());
}

$db_selected = mysql_select_db("test_db", $con);

$status = mysql_stat();
if ($status !== false) {
    echo "MySQL 狀態:\n$status";
} else {
    echo "獲取狀態失敗: " . mysql_error();
}
?>

四、 字符串解析為結構化數組

function parse_mysql_stat($stat_str) {
    $metrics = [];
    $lines = explode("\n", $stat_str);
    foreach ($lines as $line) {
        $parts = explode(" ", trim($line));
        foreach ($parts as $part) {
            if (strpos($part, ':') !== false) {
                list($key, $val) = explode(':', $part, 2);
                $metrics[trim($key)] = trim($val);
            }
        }
    }
    return $metrics;
}

// 使用
$metrics = parse_mysql_stat(mysql_stat());
echo "QPS: " . $metrics['Queries per second avg'];
echo "慢查詢: " . $metrics['Slow queries'];

五、 關鍵限制與現代替代方案

⚠️ 重要提示:
  • mysql_stat() 及 mysql_* 系列函數 **PHP 5.5 棄用、PHP 7.0 移除**。
  • 返回指標**極其有限**(僅 8 項),無法獲取 InnoDB_buffer_pool、Innodb_row_lock、Created_tmp_tables 等核心指標。
  • 官方建議:使用 SHOW STATUS 或 SHOW GLOBAL STATUS 獲取完整狀態變量(超過 300 項)。

現代最佳實踐:mysqli + SHOW STATUS

$mysqli = new mysqli("localhost", "user", "pass", "db");
$result = $mysqli->query("SHOW GLOBAL STATUS");
$metrics = [];
while ($row = $result->fetch_assoc()) {
    $metrics[$row['Variable_name']] = $row['Value'];
}
// 核心指標即時獲取
echo "QPS: " . ($metrics['Questions'] / $metrics['Uptime']);
echo "緩存命中率: " . (1 - $metrics['Innodb_buffer_pool_reads'] / $metrics['Innodb_buffer_pool_read_requests']);
// ... 300+ 指標任意查

生產級監控推薦:

  • Prometheus + mysqld_exporter:標準化指標採集、告警、圖表。
  • Percona Monitoring and Management (PMM):開箱即用的 MySQL 深度監控平台。
  • Zabbix/Telegraf + 自定義腳本:傳統運維體系整合。

六、 總結

mysql_stat() 適合舊專案快速診斷,但**指標極少、已棄用**。現代開發請直接使用 SHOW GLOBAL STATUS 獲取全量指標,並接入 Prometheus/PMM 等專業監控體系,構建可觀測的 MySQL 運行保障體系。

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