W3docs

Ein umfassender Leitfaden zur mysqli_stat-Funktion in PHP

Erfahren Sie, wie mysqli_stat in PHP den aktuellen Status des MySQL-Servers als Zeichenkette zurückgibt und wie Sie die Ausgabe sinnvoll nutzen.

Wenn Sie mit MySQL-Datenbanken in PHP arbeiten, stellt die mysqli-Erweiterung viele Funktionen für die Kommunikation mit dem Server bereit. mysqli_stat ist die einfache Funktion für Systemprüfungen: Sie fragt den MySQL-Server nach einer einzelnen Zeile mit Live-Status – Laufzeit, Anzahl der ausgeführten Abfragen, Anzahl der offenen Threads und so weiter.

Dieser Leitfaden erklärt, was mysqli_stat zurückgibt, wie Sie die Funktion sowohl im prozeduralen als auch im objektorientierten Stil aufrufen, wie Sie die Rohausgabe in verwendbare Zahlen umwandeln und welche häufigen Fallstricke Sie beachten sollten.

mysqli_stat ist nicht die Dateisystem-Funktion stat(). Wenn Sie nach Datei-Metadaten (Größe, Berechtigungen, Inode) suchen, lesen Sie stattdessen stat in PHP und fstat.

Was mysqli_stat tut

mysqli_stat ist eine eingebaute Funktion, die den aktuellen Status des MySQL-Servers als einzelne, durch Leerzeichen getrennte Zeichenkette zurückgibt. Sie ist das PHP-Äquivalent zum Ausführen von mysqladmin status auf der Befehlszeile – eine schnelle Momentaufnahme, kein vollständiges Performance-Dump.

Ein typischer Rückgabewert sieht so aus:

Uptime: 272701  Threads: 1  Questions: 18  Slow queries: 0  Opens: 17  Flush tables: 1  Open tables: 5  Queries per second avg: 0.000

Die Felder bedeuten:

FeldBedeutung
UptimeSekunden, die der Server läuft
ThreadsAktuell offene Client-Verbindungen
QuestionsSeit dem Start ausgeführte Anweisungen
Slow queriesAbfragen, die long_query_time überschritten haben
OpensVom Server geöffnete Tabellen
Open tablesAktuell geöffnete Tabellen
Queries per second avgDurchschnittlicher Abfrage-Durchsatz

Syntax

// Procedural style
mysqli_stat(mysqli $connection): string|false

// Object-oriented style
$connection->stat(): string|false

Die Funktion nimmt den Verbindungslink entgegen, der von mysqli_connect (prozedural) oder einem mysqli-Objekt (OOP) zurückgegeben wird, und gibt bei Erfolg die Status-Zeichenkette oder bei einem Fehler false zurück (zum Beispiel wenn die Verbindung unterbrochen wurde).

Grundlegende Verwendung

Prozeduraler Stil

Zuerst verbinden, dann den Status lesen. Behandeln Sie einen false-Rückgabewert immer als Fehler.

<?php

$connection = mysqli_connect('localhost', 'username', 'password', 'mydatabase');

if (!$connection) {
    die('Connection failed: ' . mysqli_connect_error());
}

$status = mysqli_stat($connection);

if ($status === false) {
    echo 'Error: ' . mysqli_error($connection);
} else {
    echo $status;
}

Objektorientierter Stil

Derselbe Aufruf als Methode des mysqli-Objekts:

<?php

$mysqli = new mysqli('localhost', 'username', 'password', 'mydatabase');

if ($mysqli->connect_errno) {
    die('Connection failed: ' . $mysqli->connect_error);
}

echo $mysqli->stat();

Den Status in Zahlen umwandeln

Die Rohzeichenkette eignet sich gut für das Logging, aber für das Monitoring benötigen Sie in der Regel einzelne Werte. Jedes Feld hat das Format Name: Wert und ist durch zwei Leerzeichen getrennt, sodass Sie es in eine Schlüssel/Wert-Map aufteilen können:

<?php

function parseMysqlStat(string $status): array
{
    $result = [];

    foreach (explode('  ', $status) as $pair) {
        // Each pair looks like "Uptime: 272701"
        [$key, $value] = array_map('trim', explode(':', $pair, 2));
        $result[$key] = $value;
    }

    return $result;
}

$status = 'Uptime: 272701  Threads: 1  Questions: 18  Slow queries: 0  Opens: 17  Flush tables: 1  Open tables: 5  Queries per second avg: 0.000';

$stats = parseMysqlStat($status);

echo 'Uptime in seconds: ' . $stats['Uptime'] . PHP_EOL;
echo 'Active threads: ' . $stats['Threads'] . PHP_EOL;
echo 'Slow queries: ' . $stats['Slow queries'] . PHP_EOL;

Ausgabe:

Uptime in seconds: 272701
Active threads: 1
Slow queries: 0

Jetzt lassen sich $stats['Uptime'] und $stats['Slow queries'] leicht mit Schwellenwerten versehen, überwachen oder als Graph darstellen.

Häufige Anwendungsfälle

  • Verfügbarkeitsprüfung. Rufen Sie mysqli_stat in einem Health-Check-Endpunkt auf; wenn es false zurückgibt, ist die Datenbank nicht erreichbar.
  • Leichtgewichtiges Monitoring. Messen Sie Threads und Queries per second avg in regelmäßigen Abständen, um Lastspitzen zu erkennen.
  • Langsame Abfragen erkennen. Ein steigender Slow queries-Zähler ist ein frühes Signal dafür, dass ein Index fehlt.

Fallstricke

  • Es wird eine Zeichenkette zurückgegeben, kein Array. var_dump auf das Ergebnis zeigt eine einzelne Zeichenkette. Parsen Sie diese selbst (siehe oben), bevor Sie mathematische Operationen auf den Werten durchführen.
  • Prüfen Sie auf false, nicht auf leer. Bei einer unterbrochenen Verbindung gibt die Funktion den booleschen Wert false zurück. Verwenden Sie einen strikten Vergleich (=== false), um ihn nicht mit einer leeren Zeichenkette zu verwechseln.
  • Es ist eine Momentaufnahme, keine Historie. Werte wie Questions sind kumulativ seit dem Serverstart; um eine Rate zu messen, müssen Sie zweimal samplen und subtrahieren.
  • Eine gültige Verbindung wird benötigt. Wenn die Verbindung fehlgeschlagen ist, erzeugt der Aufruf von mysqli_stat Warnungen oder Fehler. Überprüfen Sie immer zuerst die Verbindung – siehe mysqli_connect_error.

Verwandte Funktionen

Fazit

mysqli_stat ist ein kleines, aber praktisches Werkzeug zur Überwachung eines MySQL-Servers aus PHP heraus. Es gibt eine einzelne Statuszeichenkette mit Laufzeit-, Thread- und Abfragemetriken zurück. Prüfen Sie das Ergebnis gegen false, um eine unterbrochene Verbindung zu erkennen, und parsen Sie die Zeichenkette in eine Schlüssel/Wert-Map, wenn Sie die einzelnen Zahlen für Health-Checks oder Dashboards benötigen.

Übungen

Übung
Was gibt mysqli_stat() in PHP zurück?
Was gibt mysqli_stat() in PHP zurück?
Was this page helpful?